입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기
projectRepositoryTest.kt 파일을 아래와 같이 작성했는데 assertion 오류가 나서 원인을 모르겠어서 해당 파일 코드 첨부합니다. 94줄과 111줄 오류인 걸로 보아 skills를 assert할 때 뭐가 잘못된 것 같은데 어떻게 고쳐야 하는지 잘 모르겠습니다..! package com.yewon.portfolio.domain.repository import com.yewon.portfolio.domain.constant.SkillType import com.yewon.portfolio.domain.entity.Project import com.yewon.portfolio.domain.entity.ProjectDetail import com.yewon.portfolio.domain.entity.ProjectSkill import com.yewon.portfolio.domain.entity.Skill import org.assertj.core.api.Assertions import org.assertj.core.api.Assertions.* //import com.yewon.portfolio.domain.entity.* //import org.assertj.core.api.Assertions.* import org.junit.jupiter.api.BeforeAll import org.junit.jupiter.api.Test import org.junit.jupiter.api.TestInstance import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest @DataJpaTest @TestInstance(TestInstance.Lifecycle.PER_CLASS) class ProjectRepositoryTest( @Autowired val projectRepository: ProjectRepository, @Autowired val skillRepository: SkillRepository ) { val DATA_SIZE = 10 private fun createProject(n: Int): Project { val project = Project( name = "${n}", description = "테스트 설명 {n}", startYear = 2023, startMonth = 9, endYear = 2023, endMonth = 9, isActive = true ) val details = mutableListOf<ProjectDetail>() for (i in 1..n) { val projectDetail = ProjectDetail(content = "테스트 ${i}", url = null, isActive = true) details.add(projectDetail) } project.addDetails(details) val skills = skillRepository.findAll() val skillsUsedInProject = skills.subList(0, n) for (skill in skillsUsedInProject) { val projectSkill = ProjectSkill(project = project, skill = skill) project.skills.add(projectSkill) } return project } @BeforeAll fun beforeAll() { println("----- 스킬 데이터 초기화 시작 -----") val skills = mutableListOf<Skill>() for (i in 1..DATA_SIZE) { val skillTypes = SkillType.values() val skill = Skill(name = "테스트 ${i}", type = skillTypes[i%skillTypes.size].name, isActive = true) skills.add(skill) } skillRepository.saveAll(skills) println("----- 스킬 데이터 초기화 종료 -----") // println("----- 데이터 초기화 이전 조회 시작 -----") // val beforeInsert = projectRepository.findAll() // assertThat(beforeInsert).hasSize(0) // println("----- 데이터 초기화 이전 조회 종료 -----") println("----- 테스트 데이터 초기화 시작 -----") val projects = mutableListOf<Project>() for (i in 1..DATA_SIZE) { val project = createProject(i) projects.add(project) } projectRepository.saveAll(projects) println("----- 테스트 데이터 초기화 종료 -----") } @Test fun testFindAll() { println("----- findAll 테스트 시작 -----") val projects = projectRepository.findAll() assertThat(projects).hasSize(DATA_SIZE) println("projects.size: ${projects.size}") for (project in projects) { assertThat(project.details).hasSize(project.name.toInt()) println("project.details.size: ${project.details.size}") assertThat(project.skills).hasSize(project.name.toInt()) println("project.skills.size: ${project.skills.size}") } println("----- findAll 테스트 종료 -----") } @Test fun testFindAllByIsActive() { println("----- findAllByIsActive 테스트 시작 -----") val projects = projectRepository.findAllByIsActive(true) assertThat(projects).hasSize(DATA_SIZE) println("projects.size: ${projects.size}") for (project in projects) { assertThat(project.details).hasSize(project.name.toInt()) println("project.details.size: ${project.details.size}") assertThat(project.skills).hasSize(project.name.toInt()) println("project.skills.size: ${project.skills.size}") } println("----- findAllByIsActive 테스트 종료 -----") } }
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. jsp인식 오류입니다 new-form.jsp 회원목록 누르면 어런식으로 나옵니다
의도와 구현이 잘 이해가 가지 않아 예전에 작성 했던 코드를 가져와 아래와 같이 이해를 해볼려고 했는데 맞게 이해를 한건지 궁금합니다. save라는 네이밍으로 저장한다는 의미를 뜻함 -> 의도 코드 내부에는 DTO를 받아와 엔티티 객체로 변환하고 DB에 저장 로직 -> 구현 save 메서드 @Override public ServerMessageDto save(ServerMessageCreateRequest createRequest) { ServerMessage serverMessage = ServerMessage.builder() .serverId(createRequest.getServerId()) .channelId(createRequest.getChannelId()) .userId(createRequest.getUserId()) .parentId(createRequest.getParentId()) .profileImage(createRequest.getProfileImage()) .content(createRequest.getContent()) .writer(createRequest.getWriter()) .chatType(ChatType.SERVER) .actionType(ActionType.SEND) .files(createRequest.getFiles()) .build(); serverMessage.generateSequence(sequenceGenerator.generateSequence(ServerMessage.SEQUENCE_NAME)); return ServerMessageDto.from(messageRepository.save(serverMessage)); } postSend 라는 네이밍으로 ~ 후의 전송이라는 의미 -> 의도 코드 내부에는 특정 조건에 따라 함수 호출 로직 -> 구현 postSend 메서드 @Override public void postSend(Message<?> message, MessageChannel channel, boolean sent) { StompHeaderAccessor headerAccessor = StompHeaderAccessor.wrap(message); if (StompCommand.CONNECT.equals(headerAccessor.getCommand())) { Long userId = sendConnectionStateInfo(headerAccessor); sendConnectionStateEvent(userId); } if (StompCommand.DISCONNECT.equals(headerAccessor.getCommand())) { Long userId = saveDisconnectionState(headerAccessor); if (userId != null) { sendDisConnectionStateEvent(userId); } } }
전공자따라잡기 데이터베이스 공부중에 mysql 대신 이 강의 할때 깔았던 postgreSQL로 연습해보려고 하다가 질문드립니다 서버그룹 우클릭 -> register -> server 하면 사용자 이름으로 된 기본db와 함께 zcom이 항상 같이 생성되는데 이 zcom db 생성안되게 하려면 어떻게 해야하나요?
설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
안녕하세요 🙂 [1. 질문 챕터] : 14상 파이프라인 (실습편) 9:23 [2. 질문 내용] : vi 명령어를 통해 rtl_v.txt 파일을 들어가서 결과값을 확인하는데 rtl_v.txt파일이 정확이 어떤것이고 어떻게 생겨났는지, 파일의 result값이 어떻게 power_of_8 값이 나오는지 잘모르겠습니다. [3. 시도했던 내용, 그렇게 생각하는 이유] : tb를 코드를 찾아봤습니다. 이유는 tb쪽에 result 값으로 power_of_8을 불러오는것이 있을거라 생각했기 떄문입니다
api gateway 실행시 bootstrap.yml파일의 profiles.active.dev 설정을 하면 아래와 같이 에러가 발생하면서 api gw 포트가 8080으로 변경됩니다. spring: cloud: config: uri: http://127.0.0.1:8888 name: ecommerce profiles: active: dev 실행 로그 [nfoReplicator-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_UNKNOWN/localhost: registering service... [nfoReplicator-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_UNKNOWN/localhost - registration status: 204 [ main] o.s.b.web.embedded.netty.NettyWebServer : Netty started on port 8080 [ main] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 8080 profiles.active.dev 설정을 주석처리하면 정상적으로 동작하구요. ecommerce-dev.yml파일은 강사님이 작성하신 내용과 동일합니다. 포트가 8080으로 바뀌는 원인을 알수 있을까요?
안녕하세요! 이벤트이 매개변수 설정 관련해서 질문 드립니다. 목적: 홈페이지 내의 다양한 회원 가입 버튼을 하나의 클릭으로 잡되, 매개변수 값을 통해 어디에 위치한 회원가입 버튼인지 식별 가능하도록 셋팅하고자 함. 홈페이지 내부의 서브 페이지 별로 '회원 가입' 버튼이 존재합니다. 회원 가입 버튼이 클릭 시 'click_signup'이 뜰 수 있도록 설정하고자 하여 위와 같이 설계했습니다. 매개변수는 page로 두고, 매개변수 값으로 각 서브 페이지를 의미하는 이름을 설정하였는데 막상 어디에 넣어야 의도 한대로 정보가 수집 될지 헷갈립니다. 1. 각 페이지 별 '회원가입' 버튼의(위치는 모두 동일) class 이름을 파악하여 총 5개의 트리거를 만든 뒤, click_signup 태그를 만들어 5개의 트리거를 건다. 2. '회원가입 클릭 트리거'를 만들어서 트리거 실행 조건을 5개로 셋팅하고, 해당 트리거를 태그와 연결 어떤 방법으로 접근해야 할지 답변 주시면 감사드리겠습니다.
안녕하세요 😀 , 강의가 너무 재밌어서 2회차 돌고 있는 학습자 인사 드립니다. 🙇 복습하고 있는 중 궁금한 게 있어 글 올리게 되었습니다. 일단, 두 객체가 서로를 참조하는 상황이면 순환참조의 가능성이 있다고 알고 있습니다. Member, Team에서 두 객체가 서로 참조하고 있는 것을 예로써 이 상황을 설명하는 것을 많이 봐 왔습니다. class Team { private long id; private String name; private List<Member> members; } class Member { private long id; private String name; private Team myTeam; } 강좌의 Movie 객체와 Screening 객체도 위 처럼 필드로서 서로 참조하는 것은 아니지만, 아래와 같이 Movie는 Screening을 calculateFee 메소드의 인수로 전달받아 참조하고 있고, Screening은 필드로서 movie를 참조하고 있습니다. public class Movie { private Money fee; private DiscountPolicy discountPolicy; public Movie(Money fee, DiscountPolicy discountPolicy) { this.fee = fee; this.discountPolicy = discountPolicy; } // Movie가 Screening 참조 public Money calculateFee(Screening screening) { return fee.minus(discountPolicy.calculateDiscount(screening)); } public Money getFee() { return fee; } } public class Screening { // Screening이 Movie 참조 private Movie movie; private int sequence; private LocalDateTime whenScreened; public Screening(Movie movie, int sequence, LocalDateTime whenScreened) { this.movie = movie; this.sequence = sequence; this.whenScreened = whenScreened; } public Reservation reserve(Customer customer, int audienceCount) { Money fee = movie.calculateFee(this).times(audienceCount); return new Reservation(customer, this, audienceCount, fee); } public Money getFixedFee() { return movie.getFee(); } public boolean isSequence(int sequence) { return this.sequence == sequence; } public LocalDateTime getStartTime() { return whenScreened; } } 서로 참조하는 것은 당장은 아니더라도 추후에 순환참조를 만들 길을 열어 두게 되어 왠만하면 배제해야 하는 것으로 알고 있습니다. 여기서 질문이 있습니다! 예제에 사용된 Movie와 Screening도 두 객체가 서로를 참조하고 있는 것으로 볼 수 있나요? 만약 그렇다면 이 경우에도 순환참조의 가능성이 있는 것인가요? 감사합니다. 😃
안녕하세요 강의 잘 듣고 있습니다. type TFunction = (x: number, y: number) => number; const fun4: TFunction = function(x) { return x; } 위와 같이 함수의 형식을 type 으로 명시하고 fun4 와 같이 함수를 표현했을 때, 매개변수가 2개 필요한데 1개 밖에 적지 않았으므로 오류가 발생할 것으로 기대했는데, 오류를 발생시키지 않더라구요.. 왜 그런것일까요?? 코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다! [코드팩토리 디스코드] https://bit.ly/3HzRzUM - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
안녕하세요. 현재 아래 빨간색 부분 강의 실습을 진행중에 있습니다. root@873e7cd9bbae:/app# ls build/libs 이렇게 했을 때 아래 처럼 정상적으로 파일이 생성되었습니다. Leafy-0.0.1-SNAPSHOT.jar Leafy-0.0.1-SNAPSHOT-plain.jar 그 다음 아래와 같이 실행 했을 때 Error 가 발생했습니다. 주신 실습 파일 그대로 빌드했습니다. root@873e7cd9bbae:/app# java –jar build/libs/Leafy-0.0.1-SNAPSHOT.jar Error: Could not find or load main class –jar Caused by: java.lang.ClassNotFoundException: –jar 이경우 어디를 체크해 봐야 하는 건지요? 감사합니다.
현재 제가 인벤토리를 만들어 사용할 스킬을 등록하는 스킬창과 획득한 스킬을 보관하는 스킬보관창을 만들었습니다 스킬창에 있는 스킬은 활성화되고 보관창에 있는것은 비활성화되게 할려는 의도입니다. 액티브 스킬의 경우 키를 눌러 발동하기 때문에 문제가 없는데 패시브 스킬의 경우 스킬보관창에 있어도 계속해서 발동됩니다. 그래서 패시브 타입인 경우 스킬보관창에 있을 경우 비활성화되게 하기 위해 skill 스크립트와 skillsystem 스크립트에 비활성화 변수를 추가하여 의도한 목적을 제작할려고 하였는데 어디에서 제어해야 하는지 감이 안잡혀 이 부분에 대해 어딜 수정해야 되는지에 대한 조언을 부탁드립니다...