묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
문자열 길이 제한
안녕하세요 강의 듣다가 문자열의 길이 100의 제한이 코드에서는 적용되지 않는 것인지 궁금해서 질문 남깁니다
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
hello-mvc?name=spring!! 실행시..
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.아래의 아래가 뜹니다... 오후 4:32:35: Executing 'dependencies'...> Task :dependencies------------------------------------------------------------Root project 'hello-spring'------------------------------------------------------------annotationProcessor - Annotation processors and their dependencies for source set 'main'.No dependenciesbootArchives - Configuration for Spring Boot archive artifacts. (n)No dependenciescompileClasspath - Compile classpath for source set 'main'.+--- org.springframework.boot:spring-boot-starter-thymeleaf -> 3.2.5| +--- org.springframework.boot:spring-boot-starter:3.2.5| | +--- org.springframework.boot:spring-boot:3.2.5| | | +--- org.springframework:spring-core:6.1.6| | | | \--- org.springframework:spring-jcl:6.1.6| | | \--- org.springframework:spring-context:6.1.6| | | +--- org.springframework:spring-aop:6.1.6| | | | +--- org.springframework:spring-beans:6.1.6| | | | | \--- org.springframework:spring-core:6.1.6 (*)| | | | \--- org.springframework:spring-core:6.1.6 (*)| | | +--- org.springframework:spring-beans:6.1.6 (*)| | | +--- org.springframework:spring-core:6.1.6 (*)| | | +--- org.springframework:spring-expression:6.1.6| | | | \--- org.springframework:spring-core:6.1.6 (*)| | | \--- io.micrometer:micrometer-observation:1.12.5| | | \--- io.micrometer:micrometer-commons:1.12.5 (*) - Indicates repeated occurrences of a transitive dependency subtree. Gradle expands transitive dependency subtrees only once per project; repeat occurrences only display the root of the subtree, followed by this annotation.(n) - A dependency or dependency configuration that cannot be resolved.A web-based, searchable dependency report is available by adding the --scan option.BUILD SUCCESSFUL in 711ms1 actionable task: 1 executed오후 4:32:36: Execution finished 'dependencies'.
-
미해결실전! Querydsl
테스트 오류
[질문 내용]https://drive.google.com/file/d/1z8O0dwyDnjTmm-OtFu6CcHwTW6sXSxlV/view?usp=sharing 강의 따라하다가 clean 하고 build를 다시 했는데 빌드시 테스트에 오류나고 테스트실행시 모두 오류떠서 돌아가지 않습니다..ㅜㅜ !
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
No tests were found
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]위처럼 join_membership하면 체크표시가 뜨고 한글로 작성하면 No tests were found라고 뜨는 이유는 뭔지 궁금합니다
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
No tests were found
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]Intellij로 2개 다 하고 예제처럼 코드를 작성했는데도 No tests were found가 출력됩니다 오른쪽에는 Process finished with exit code 0 이와같이 나오고요 어떤게 문제인지 모르겠습니다
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
준영속 상태로 만들기
[질문 템플릿]1. 예2. 예3. 예[질문 내용]Member member = em.find(Member.class, 150L); member.setName("AAAAA"); em.detach(member); tx.commit();이 코드에서 setName에서 영속성 컨텍스트에 있는 member에 수정이 발생했고, 이를 스냅샷과 비교하여 dirty checking을 합니다. UPDATE 쿼리는 쓰기 지연 SQL 저장소에 저장됩니다.위 과정이 모두 끝난 이후에 detach를 하더라도 UPDATE 쿼리는 쓰기 지연 SQL 저장소에 있을텐데, UPDATE 쿼리가 나가지 않는 이유는 flush할 때 영속성 컨텍스트에서 관리하는 엔티티가 아닌데 생성된 쿼리는 거르고 DB로 날리는 메커니즘으로 작동하는 건가요?
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
short, int
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 네2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요. 백엔드 개발을 하고 있는 주니어 개발자입니다.질문이 있습니다. short는 2byte이고 int는 4byte면 2byte 이상 4byte 이하 값에 대한 연산은 int보다 short를 사용하는 것이 메모리나 속도 측면에서 적합하지 않나요? 보통 int를 사용하는건 굳이 short를 사용할만한 메리트가 없어서 그런걸까요? 구글링 해봤을 땐 자바에서는 연산을 할 때 피연산자를 4byte로 저장하기 때문에 short는 오히려 int형으로 변환 후 연산을 한다고 하던데 정확히 이해하기가 쉽지 않아서요,,, 혹시 답변 가능하시다면 부탁드리겠습니다.. 감사합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
전체 회원 다 뜨는거 말고 원하는 아이디만 찾을떄 어떻게해야 할까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] <!DOCTYPE HTML> <html xmlns:th="http://www.thymeleaf.org"> <body> <div class="container"> <form action="/members/find" method="post"> <div class="form-group"> <label for="name">찾기</label> <input type="text" id="name" name="name" placeholder="이름을 입력하세요"> </div> <button type="submit">찾기버튼</button> </form> </div> <!-- /container --> </body> </html>find.html입니다.<!DOCTYPE HTML> <html xmlns:th="http://www.thymeleaf.org"> <body> <div class="container"> <div> <table> <thead> <tr> <th>#</th> <th>이름</th> </tr> </thead> <tbody> <tr th:each="member : ${members}"> <td th:text="${member.id}"></td> <td th:text="${member.name}"></td> </tr> </tbody> </table> </div> </div> <!-- /container --> </body> </html> memberfind.html 입니다 memberController.java 입니다 @GetMapping("members/find") public String find(MemberForm form) { return "members/find"; } @PostMapping("members/find") public String find(Model model) { List<Member> members = memberService.findMembers(); model.addAttribute("members", members); return "members/memberfind"; } } List<Member> members = memberService.findMembers(); 여기 부분을 List<Member> members = memberService.findOne(); 으로 바꾸어야할텐데 ()-> 여기안에 매개변수를 뭘로 해야할까요
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
switch문 12분55초
자바의 새로운 기능을 별도로 깊이있게 다뤄주신다고 하셨는데 이것도 고급편에서 다뤄주시는건가요?
-
미해결백엔드 개발자 성능 개선 초석 다지기
nGrinder validate가 안됩니다.
다른 질문을 보니 www.nate.com으로 시도해보라하여 했지만 똑같이 되지 않습니다. Caused by: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: General error during conversion: Unsupported class file major version 61 java.lang.IllegalArgumentException: Unsupported class file major version 61 Caused by: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: General error during conversion: Unsupported class file major version 61 java.lang.IllegalArgumentException: Unsupported class file major version 61
-
미해결김영한의 실전 자바 - 중급 2편
제네릭 메서드
역시 갓 영한님 믿고듣는 강의.. 감사합니다 질문이 하나 있습니다. public static <T> T genericMethod(T t) { System.out.println("generic print: " + t); return t; }이 코드에서 타입 지정해주는 T를왜 다 똑같은 타입으로 써야 하는지 궁급합니다. 예를 들자면 위 코드를 보면 매개변수 타입도 T이고 반환 타입도 T인데매개변수의 타입과 반환타입을 꼭 맞춰서 써야 하는지 궁금하네요 public static <T> T genericMethod(A t) { System.out.println("generic print: " + t); return t; }이런식으로는 왜 못쓰는건가요 ?(매개변수로는 String을 받지만 결과 타입은 Integer 로 할수도 있지않나요 ? 근데 제네릭 메서드는 왜 이렇게는 불가능한가요?)
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
HelloSpringApplication 실행 문제
openjdk 17버전으로 스프링부트를 실행했습니다.강의 1강 대로 프로젝트를 만들어 인텔리제이에서 열었는데,hellospringApplication 실행하는 버튼이 없네요... 에러는 "Connect timed out"이라고 뜹니다스프링부트가 처음이라 어디가 잘못된 건지 모르겠어요 도움 부탁드립니다...
-
미해결실전! Querydsl
@Transactional 시 @Rollback(value = false)와 @Commit의 차이
@Test @Transactional @Rollback(value = false) void testMember() { // given Member member = new Member(); ..... }@Test @Transactional @Commit void testMember() { // given Member member = new Member(); ..... }JUnit에서 테스트 할 때 @Transactional이 붙어있으면 자동으로 롤백되기 때문에 기본 동작을 방지하기 위해(테스트 후에 persist한 데이터를 확인할 수 있도록 하기 위해) @Rollback(value = false)를 사용한다고 알고있습니다.그렇다면 @Rollback(value = false) 대신 @Commit을 사용해도 같다고 봐도 될까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
hello-mvc에서 view에서 인식을 못하네요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.hello-mvc?name값으로 넘겨줄려는데 v부분에서 인식을 못합니다!
-
미해결Kevin의 알기 쉬운 Spring Reactive Web Applications: Reactor 1부
DROP 전략과 LATEST 전략의 차이점이 무엇인가요?
안녕하세요. 수업 잘 듣고 있습니다~백프레셔 전략 중 DROP과 LATEST 전략은 결국 버퍼가 비워질 때까지 Publsiher에서 emit되는 데이터를 제거(drop or discard)하는 것으로 이해했습니다. 버퍼가 비어지는 시점 이후로 emit되는 데이터를 다시 버퍼에 채운다는 점에서 두 전략은 같은 것으로 보입니다. 차이점을 알려주시면 감사하겠습니다~
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
'다대다' 속성 value 타입은 'Category'일 수 없습니다. 오류
안녕하세요 강의를 따라하던중 다음과 같은 오류가 발생합니다.교안과도 같은 코드이고 인텔리제이도 껐다 켰는데 왜 이런 문제가 발생하는지 모르겠습니다.
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
자바 컴파일 실행이 안 되서 질문 드립니다..
같은 패키지 내부에 Test.java와 BusObject.java가 있습니다. Test에서 BusObject객체를 만들어서 사용하는 것을 테스트하고자 하는데 다음과 같이 에러가 나옵니다.javac BusObject.java Test.javajava BusObject.java Test.java (java BusObject Test 도 동일하게 안 됩니다ㅜㅜ)Error: Could not find or load main class week11.BusObjectCaused by: java.lang.ClassNotFoundException: week11.BusObject뭔가 문제인가요..?지금까지 컴파일할때 week11.하고 패키지도 붙여보고, -classpath . 도 해봤습니다...
-
미해결김영한의 실전 자바 - 중급 2편
섹션 10. Collections
Map<String, Integer> map = Map.of("a", 1, "b", 2, "c", 3, "ab", 4); 실행 결과 1번째 map = {a=1, b=2, c=3, ab=4} 2번째 map = {b=2, a=1, ab=4, c=3} 3번째 map = {ab=4, c=3, b=2, a=1} 4번째 map = {b=2, c=3, ab=4, a=1} 5번째 map = {b=2, a=1, ab=4, c=3}Map은 순서를 보장하지 않고, 중복을 허용하지 않습니다. HashMap에서는 key값을 가지고 hashCode를 구하고 hashIndex에 값을 보관하기에 입력한 순서대로 저장하는 것을 보장할 수 없습니다.그런데 map.of()로 생성을 했을 때는, 그 순서가 실행 할 때마다 달라져있습니다. 랜덤으로 돌린 것처럼...왜 매번 입력되는 값의 순서가 달라지는 건가요ㅠㅠ
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
중간테이블에 대한 낙관적 락 적용법
현재 Member 테이블과 Appointment 테이블이 존재하는데, N:N 관계이기 때문에 아래와 같이 AppointmentUser라는 중간 테이블이 존재합니다.@Entity @Table(name = "appointment_and_user") public class AppointmentUser extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "apppointment_id", nullable = false) private Appointment appointment; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id", nullable = false) private Member member; @Enumerated(value = EnumType.STRING) @Column(name = "member_authority", nullable = false) private MemberAuthority memberAuthority; @Version private Long version;하나의 AppointmentUser 테이블은 약속과 멤버의 id를 하나씩 가집니다. 여기서 레포지토리의 코드는 이러합니다.public interface AppointmentUserRepository extends JpaRepository<AppointmentUser, Long> { ... @Lock(LockModeType.OPTIMISTIC) @Query("select au from AppointmentUser au where au.id = :id") AppointmentUser findByIdWithOptimisticLock(Long id);findByIdWithOptimistic 메서드를 통하여 특정 유저-약속 테이블의 데이터를 통해 AppointmentUser 객체를 반환합니다. 서비스 계층의 코드는 아래와 같습니다.@Transactional public void updateAuthority(Long appointmentId, Long loginMemberId, Long targetMemberId) { Member loginMember = memberRepository.getById(loginMemberId); Member targetMember = memberRepository.getById(targetMemberId); Appointment appointment = appointmentRepository.getById(appointmentId); AppointmentUser loginAppointmentUser = appointmentUserRepository.getByMemberAndAppointment(loginMember, appointment); AppointmentUser targetAppointmentUser = appointmentUserRepository.getByMemberAndAppointment(targetMember, appointment); appointment.changeTitle("asd"); validateIsAdminMember(loginAppointmentUser.getId()); MemberAuthority targetAuthority = targetAppointmentUser.getMemberAuthority(); targetAppointmentUser.updateAuthority(MemberAuthority.getAnotherAuthority(targetAuthority)); appointmentRepository.save(appointment); appointmentUserRepository.save(targetAppointmentUser); } private void validateIsAdminMember(Long loginAppointmentUserId) { if (appointmentRepository.findByIdWithOptimisticLock(loginAppointmentUserId).getMemberAuthority() != MemberAuthority.ADMIN) { throw new NotAdminMemberException(); } } <로직 설명>하나의 약속 내에 멤버 두명이 존재각 멤버들은 ADMIN or NORMAL 권한을 갖고 있음.두명 다 약속 내 에서 ADMIN 권한을 갖고 있다는 상황을 가정. (ADMIN은 AppointmentUser 엔티티의 MemberAuthority 라는 필드의 Enum 값입니다.)두명이 서로를 동시에 ADMIN에서 NORMAL로 권한을 박탈하는 경우, 하나의 약속 안에 ADMIN인 사람이 없어지는 예외적인 문제 상황이 발생함.그래서 @Version을 AppointmentUser 엔티티의 필드로 등록하여 해결하려고 했으나..사용자 A와 B가 있다고 할 때 service 코드 내의 validateIsAdminMember 메서드를 통해 상대방의 권한을 박탈하려는 유저(본인)가 ADMIN인지 검증하여 ADMIN이 맞다면 박탈하고, ADMIN이 아니라면, 예외를 던지게 끔 하는 로직에서,레포지토리 내의 findByIdWithOptimisticLock 메서드를 동시에 접근했을때 Version 필드를 통해 동시성 문제를 제어할 수 있다고 생각했으나..validateIsAdminMember로 검증하는 A와 B의 AppointmentUser 엔티티는 서로 다른 객체(데이터)이기 때문에 서로 다른 테이블의 Version 값을 변경하기 때문에 동시성 보장이 안됨..그래서 Appointment에 Version필드를 넣어주려 했지만, Version값은 해당 테이블에 변화가 생겨야 변한다.하지만 로직상, AppointmentUser(중간테이블)에 변화가 생기는게 맞다...위와 같은 중간 테이블 사용으로 인한 문제가 발생하였을 때 어떻게 강의자님이시라면 어떻게 해결하실지 궁금합니다!
-
해결됨김영한의 실전 자바 - 중급 2편
섹션 10. Comparable
public class MyUser implements Comparable<MyUser> { private String id; private int age; public MyUser(String id, int age) { this.id = id; this.age = age; } public String getId() { return id; } public int getAge() { return age; } @Override public int compareTo(MyUser o) { return this.age < o.age ? -1 : (this.age == o.age) ? 0 : 1; }MyUser의 멤버 변수는 private인데 compareTo(MyUser o)에서 this.age는 본인의 값을 가져다 쓴다고 쳐도 o.age로 호출이 어떻게 가능한 건가요??