묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 핵심 원리 - 기본편
AppConfig뒤에 .class붙이는 의미는 먼가요?ㅇ
검색해도 잘 안나오네요
-
해결됨스프링 부트 개념과 활용
mvn package 오류가 뜨는데 원인을 모르겠습니다.
C:\Users\kjs50\IdeaProjects\SpringBootStart>mvn package C:\Users\kjs50\IdeaProjects\SpringBootStart>set JAVA_HOME=D:\01.app\java\jdk1.6.0_31 [INFO] Scanning for projects... Downloading: http://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-st arter-parent/2.0.3.RELEASE/spring-boot-starter-parent-2.0.3.RELEASE.pom [ERROR] The build could not read 1 project -> [Help 1] [ERROR] [ERROR] The project org.example:SpringBootStart:1.0-SNAPSHOT (C:\Users\kjs50\IdeaProje cts\SpringBootStart\pom.xml) has 1 error [ERROR] Non-resolvable parent POM: Could not transfer artifact org.springframework.b oot:spring-boot-starter-parent:pom:2.0.3.RELEASE from/to central (http://repo.maven.apac he.org/maven2): Failed to transfer file: http://repo.maven.apache.org/maven2/org/springf ramework/boot/spring-boot-starter-parent/2.0.3.RELEASE/spring-boot-starter-parent-2.0.3. RELEASE.pom. Return code is: 501 , ReasonPhrase:HTTPS Required. and 'parent.relativePath ' points at wrong local POM @ line 17, column 13 -> [Help 2] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException [ERROR] [Help 2] http://cwiki.apache.org/confluence/display/MAVEN/UnresolvableModelException
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
SQL where 문 vs Java stream filter 성능차이에 관한 질문입니다
안녕하세요! 항상 강의 잘 듣고있습니다:) 스프링 관련해서 프로젝트를 하다가 두 지점사이의 거리를 계산하는 쿼리를 짤 일이 생겼습니다. (예: 내 위치에서 반경 5km이내에 있는 장소들을 가져오기 등) 그래서 QueryDsl 이나 Jdbc Template 으로 SQL 내장 함수를 호출하여 만들려고 했는데 제 경우에는 각 장소의 위경도가 암호화 되어있고 이걸 복호화 해서 거리계산 해야하는데 쉽지않더라고요ㅠㅠ 그래서 문득 생각해보니 이 기능은 전체 데이터를 가져온 다음 차라리 자바 코드로 필터링 하면 더 코드짜기 쉽지 않을까 하는 생각이 들었습니다. [질문] DB SQL where 로 필터링 해서 가져오는 것과 자바코드로 필터링 하는 것 두 방법간에 성능차이가 얼마나 나는지 궁금합니다 (물론 일반적으로는 RDBS 가 더 최적화 되어있을 것 같긴 하지만 실무에서 자바로 필터링하는 경우가 있는지도 궁금합니다) 좀 두서없이 쓴것 같은데 읽어주셔서 감사합니다ㅠ
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
동적으로 작용할 때
만약에 실전1같은 사이트가 있는데, 이제 여기서 이미지정보가 추가되어서 상품 이미지가 보여지는 사이트가 있다고 가정하면, 그 이미지는 DB에 넣어서 상품정보와 같이 가져와야하는건가요 아니면 웹서버에 폴더를 따로 만들어서 거기에서 가져와야 하는 건가요?? 만약에 둘다 가능하다면, 최신 트렌드또는 이쪽으로 공부할수 있는 구글링 키워드 부탁드려도 될까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
getter와 setter를 만드는 이유가 뭔가요?
값을 수정하고 받아들인 다는 의미는 알겠는데 언제 어떻게 사용하는지에 대해서 궁금합니다. 안만들면 안되는건가요?
-
미해결실전! 스프링 데이터 JPA
insert에 대해서 문의드립니다.
안녕하세요 김영한님:) 실무 적용 중에 궁금한게 있어서 문의 드리는데요. 보통 entity내에 joinColumn이든 mappedBy든 연관관계를 성립 시켜주는데요 그냥 단순히(?) 주문생성(주문관련된 테이블들에 insert이 이루어짐)만 이루어진다면 굳이 연관관계 맵핑을 하지 않고 각 주문관련 테이블들에 하나씩 컨트롤 하면서 insert 하는게 편리할 것 같다는 생각이 들어서.. 이런 접근 방법이 맞을까요? 물론 테이블 간 FK로 묶여 있는 테이블들도 있긴 한데 이런 경우는 위 처럼 하면 JPA의 객제관점으로 테이블에 접근 하는 관점에서는 어긋나는것 같기도 하고...영한님의 의견은 어떠실까요? 참고로 이 서비스는 사실상 주문관련 테이블은 insert만 이루어지고 select는 상태값 정도 조회하는 신규 api 입니다. 쿼리가 아닌 JPA 관점에서 접근하는 게 생각보다 딱 이거다 이런게 명확하지 않으닌까 생각이 진짜 많아지는것 같아요 ㅠㅠ 감사합나다.
-
미해결스프링 핵심 원리 - 기본편
사용자 정의 Qualifer 작성시 질문입니다!
안녕하세요, 강의를 듣다가 궁굼한 점이 생겨서 질문 드려요. 이 강의 1분 40초 쯤에서, MainDiscountPolicy를 만든 뒤 어노테이션들을 추가하는 부분에서 궁굼증이 생겼습니다. @Qualifier("mainDiscountPolicy")를 써주면 @Qualifier파일 안에 있는 @Target부터 @Documented 가 포함되어 있을 거 같다고 생각했습니다. 강의 1분 40초의 7줄부터 10줄까지를 쓰는 이유가 있나요?
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
엔티티가 아닌 DTO로 변환을 할 때 컬렉션 조회를 할 경우 @JsonIgnore가 필요로 하는상태가 생겼습니다.
API 개발 고급 - 컬렉션 조회 최적화에서 주문 조회 V2: 엔티티를 DTO를 변환 수업에서 4:30 에 No properties문제가 발생하여 저도 getter를 넣었으나 다음과 같은 에러가 발생했습니다. 구글링 한 결과 해당 컬렉션이 지연 로딩으로 인해 프록시 객체를 serialize하기 때문에 나는 에러라고 합니다. 그래서 제가 조치한 것은 해당 에러가 발생하는 @OneToMany필드를 @JsonIgnore를 했습니다. 다행히 정상 작동은 했으나 김영한님의 강의에서도 그렇고 제가 개인적으로 하는 프로젝트에서도 단 한번도 Entity에 @JsonIgnore를 사용하지 않았습니다. 단순히 DTO에 getter를 사용했는데 작동이 잘 되었습니다. 어떻게 하면 Entity에 @JsonIgnore를 사용하지 않고 문제를 해결할 수 있을까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
h2실행오류
Exception opening port "8082" (port may be in use), cause: "java.net.BindException: Address already in use: NET_Bind" [90061-200] 포트 pid 찾아서 taskkill 돌리고 다시 h2.bat 실행해도 계속 뜹니다.... 사용자폴더에 .h2.~~.properties파일도 없어서 포트도 못바꾸고 있는데 무엇을 잘못했을까요 ㅠㅜ "8082" (port may be in use), cause: "java.net.BindException: Address already in use: NET_Bind" [90061-200] 포트 pid 찾아서 taskkill 돌리고 다시 h2.bat 실행해도 계속 뜹니다.... 사용자폴더에 .h2.~~.properties파일도 없어서 포트도 못바꾸고 있는데 무엇을 잘못했을까요 ㅠㅜ 윈도우OS고, java SE 1.8과 java SE 11 둘다 설치돼있으며 환경변수는 11로 바꿨습니다 혹시 해결하기가 어렵다면 H2를 건너뛰거나 다른 DB로 대체할 수 있을까요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
요청 파라미터를 조회하는기능과 http 메시지 바디를 직접 조회하는 기능
안녕하세요 혹시 요청 파라미터를 조회하는기능과 http 메시지 바디를 직접 조회하는 기능이란게 뭔지 잘 이해가 안가는데 어떤걸 공부해야할까요.. 요청파라미터는 url에 입력되는 사용자의 입력값 즉jsp를 통해서 주입되는 값인거같은데 http 메시지 바디기능은 전혀 모르겠네요 ㅠ
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Entity 생성시 다른 애그리거트의 정보/로직이 필요한 경우 생성 방식의 선택 기준
안녕하세요. 이번 강의 내용에서 추가적인 요구사항을 적용해보는 중, 설계상 궁금증이 생겨 질문하게 되었습니다. jpashop에서는 환불제도 악용 회원의 주문을 일정 기간동안 금지할 수 있다는 요구사항을 추가했습니다. 이 변경된 요구사항을 위해, MemberStatus라는 VO를 Member 클래스에 추가했습니다. 결과적으로, Order 클래스를 생성함에 있어서 MemberStatus의 로직(다른 애그리거트의 Value Object)을 필요로 합니다. 이 때, 선택할 수 있는 생성 방식이 여러개가 떠올라서, 이들의 선택 기준에 대한 조언을 듣고 싶습니다. 첫번째 방식. 정적 팩토리 메서드의 매개변수로 추가 첫번째 방식은 생성시 필요한 정보를 가진 객체(MemberStatus)들을, 정적 팩토리 메서드의 매개변수로 전달합니다. 선택 기준은 객체(Order)를 생성함에 있어서, 특정 객체(MemberStatus)가 필요함을 명시적으로 알릴 수 있습니다. 생성로직을 해당 클래스가 전적으로 제어하는 것이 생성 로직을 한 곳에 더 응집시킬 수 있습니다. 이 두가지를 고려했습니다. 이 방식에서는 회원 차단에 따른동작 분기는 정적 팩토리 메서드 내에서 이루어집니다. 다만, Order를 생성하는데 있어서 MemberStatus 이외에도 협력해야 할 애그리거트들이 많이 존재하는 경우 Order 클래스가 너무 많은 의존성을 가지게 될 수 있다는 점이 우려됩니다. 두번째 방식. 생성을 위한 정보/로직을 가지고 있는 클래스가 생성을 담당 선택 기준은 Member가 Order를 생성하기 위한 로직(회원 차단 여부)을 제공합니다. 위 내용을 고려했습니다. 이 방식에서는 검증 통과 여부에 따른 동작 분기는 Member의 메서드 내에서 이루어집니다. 다만, 이 방식은 Member —> Order로의 불필요한 의존성을 만들어낼 수 있다고 우려했습니다 특히, 생성에 대한 책임을 맡는다는 것은 내부에 어떤 데이터를 가지고 있는지 전부 알아야 한다는 점에서 생각보다 과도한 의존성을 부여하고 있는 것 같습니다. 또한 협력해야 할 애그리거트가 많아질 수록, Member가 생성과 관련된 다른 클래스들에 대한 많은 의존성을 감당해야 한다는 점이 우려됩니다. 세번째 방식. 애그리거트를 생성하는 Domain Service를 만든다. 선택기준은 많은 의존성을 가져야 하는 생성 로직을 서비스에 담음으로서, 엔티티가 불필요한 의존성을 가지는 것을 방지합니다. 위 내용을 고려했습니다. 다만, 조금만 복잡해져도 도메인 서비스를 사용하고자 하는 유혹이 생겨서, 자칫하면 다른 로직들도 Domain Service로 구현해, Entity 자체의 응집성이 작아지는게 아닌가 우려스럽습니다. 질문 내용 정리 1. 각 생성 방식을 선택함에 있어서 미흡한 선택 기준에 대해서 조언 해주 실 수 있나요? 2. 또 첫번째, 두번째 방식이 우려하는 사항들은 현재의 사례에서는 잘 드러나지 않는 '잠정적인' 우려사항들인데, 실제로 이 우려사항들이 나타나기 전까지는 가장 간단한 구현(첫번째 혹은 두번째)을 그대로 사용해도 될까요?
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
BeanCreationException 에러 문의입니다!
MemberFormServlet을 만들고 메인 애플리케이션 실행 도중 발생한 오류입니다. 저번 챕터까지 강의를 듣고 잠시 나갔다 와서 그런지 갑자기 javax.servlet.annotation.WebServlet을 찾아내지 못하고 컴포넌트 스캔을 하지 못하는 것 같은데 해결 방법이 있을까요...?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
CRUD 구현 질문
안녕하세요 영한님 스프링 핵심 원리와 MVC 1편 강의 너무 잘 들었습니다! 스프링 MVC 1편을 완강했는데 CRUD중 D의 구현이 없더라구요. 강의에서도 D의 구현은 한번 해보라고 하셔서 조금 응용해서 구현을 해보았는데 이런식으로 하면되는건가요? 그리고 강의에서 D를 다루지 않은 이유가 혹시 있는지 궁금합니다..! Repository Controller view template
-
미해결스프링 핵심 원리 - 기본편
외부 라이브러리 개념에 대한 질문 드립니다.
안녕하세요 김영한님 항상 강의 잘듣고 있습니다! 다름이 아니라 강의 중에 코드를 고칠 수 없는 외부 라이브러리라는 개념이 자주 등장하는데요. 해당 개념에 대해서 잘 알지 못해서 이해가 힘든 부분이 있는데 혹시 외부 라이브러리라는 개념을 예시를 통해서 설명해 주실 수 있을까요?? 감사합니다.
-
미해결스프링 핵심 원리 - 기본편
실제 프로젝트를 어떻게 만들어가야할지 고민입니다
훌륭한 강의 정말 잘들었습니다! 에어비엔비랑 비슷한 프로젝트를 진행하려는데, 현재 배운 강의만으로는 스프링으로 웹앱 배포하기에는 많이 부족할거같다는 생각이 듭니다ㅠㅠ 아직 프론트엔드는 html css 바닐라js로 페이지 만들어본것밖에 없고, 이런 프론트엔드(!)와 DB를 스프링과 어떻게 잘 연동해서 사용할지를 모르겠는데.. 혹시 앞으로 공부할 방향을 어떻게 잡아야 할지 알려주실수 있으신가요..? 당장 만들어보고 싶지만 이후에 나올 강의들을 다 들어보고 시작하는것이 나을까요?
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
JPA/Spring 동기화 문제와 관련하여 문의드립니다.
안녕하세요. 최근 JPA강의와 Spring boot강의를 연달아 들었는데요, 너무 좋은 강의 감사드립니다. 지금까지 영한님께 배운 내용을 토대로 Spring boot + jpa를 이용하여 사이드 프로젝트를 진행중인데, 동기화 문제와 관련해 문의드리고자 글남깁니다. 제가 문제를 겪은 시나리오는 아래 코드와 같습니다. 이 경우 여러 사용자가 동시에 요청하지 않는 경우에는 문제없이 잘 동작하지만, 동시에 많은 사용자가 접근하게 되는 경우에는 동기화 문제가 발생될 것으로 생각됩니다. ( 어떤 thread가 jpa context에 업데만 해놓고 commit하기전에 다른 스레드에서 쿼리를 통해 데이터를 가지고 온 경우.) 그렇다고 Controller layer에서 단순히 sync 키워드를 사용하게 되면 많은 사용자가 동시에 접근할때, 너무 느려지지 않을까 우려되기도 하는데, 어떤 방식으로 접근하는게 좋을지 조언 여쭙고자 질문드립니다. @Transactional boolean addInformation(Data data) { // 어떤 정보가 현재 DB에 쓰여져 있지 않은 경우에 한해 업데이트. List<Infomation> info infoRepository.findAllWith(data); if (info.size() > 1) return false; /// DB에 없으므로 db update ..... }
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
return "redirect:/";를 쓰는 이유가 궁금합니다
안녕하세요?? 해당 강의 12:30 무렵 return "redirect:/";을 이용해 초기 화면으로 되돌아 가는데, HomeController처럼 return "home"; 을 사용하면 안되는건가요?? 두 가지 모두 초기 화면으로 돌아가는것 같은데 어떤 차이인지 궁금합니다.
-
해결됨스프링 핵심 원리 - 기본편
AppConfig가 왜 실행되는지 궁금합니다.
안녕하세요 선생님 AppConfig.class관련하여 질문드리려고 합니다. 해당 영상에서 7:12부분에 call AppConfig.memberRepository call AppConfig.memberService callAppConfig.orderService 이 세라인이 호출되는 것을 볼 수 있습니다. 허나, 7:12까지의 상황은 AutoAppConfig.class에서 다른 클래스의 @Configuration이 선언된 모든 @Bean객체를 만들지 않는 것으로 알고 있습니다. @Configuration@ComponentScan( excludeFilters = @ComponentScan.Filter (type = FilterType.ANNOTATION, classes = Configuration.class))public class AutoAppConfig {} 따라서, AppConfig.class도 @Configuration이 정의 되어 있으므로 Bean객체를 만들지 않는 것으로 이해했습니다. 그런데 보시는 바와 같이 call AppConfig.memberRepository call AppConfig.memberService callAppConfig.orderService 이 세라인이 호출되는데... 왜 호출되는건지... 궁금합니다... 답변주시면 정말 감사드리겠습니다. 추가로, 선생님 강의 정말 감사드립니다. 요즘 정말 개발에 흥미를 느끼고 하루하루 알아가는 즐거움에 살고 있습니다. 선생님 덕에 개발에 흥미를 붙일 수 있어서, 정말 감사한 마음 뿐입니다. 이렇게 좋은 강의를 널리 알려주셔서 정말 감사드립니다. 앞으로도 좋은 강의 많이 부탁드리겠습니다. 감사합니다.
-
미해결스프링 핵심 원리 - 기본편
ApplicationContext관련 질문드립니다.
MemberApp에서는 ApplicationContext타입에 AnnotationConfigApplicationContext(AppConfig.class)를 할당해주었는데 왜 테스트 할 때는 AnnotationConfigApplicationContext타입에 할당해주는것인가요? 감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
DTO의 필요성이 와닿지 않습니다.
안녕하세요 강사님, 질문 드리겠습니다. DTO의 필요성에 대한 부분으로 "엔티티가 변경됐을 때 변경된 사항이 API 스펙에 적용되지 않아 API가 제대로 동작하지 않을 수 있다."라고 말씀해주셨는데요. 이러한 문제가 발생하는 V1에서는 받을 때는 Member, 돌려줄때는 CreateMemberResponse를 사용하고 있습니다. 그런데, 여기서 요청을 때, 응답을 줄 때 모두 Member를 사용해버린다면.. Member가 변경된다 하더라도 Response에서도 변경사항이 적용되기 때문에 문제가 없는 것 아닌가?? 하는 생각이 듭니다. 이 부분에 대한 추가설명을 부탁드리고 싶습니다. 감사합니다! ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ 이어지는 강의들을 듣다보니 자연스럽게 이해되었습니다. 이해한 바를 바탕으로 질문에 대한 자답을 해보자면.. ************************************************** DTO를 반드시 사용해야 하는 이유는 다음과 같다. 1. DTO를 사용하지 않을 경우 엔티티의 변경에 의해 API 스펙이 변경될 수 있다. -> 엔티티와 API가 일대일 대응의 관계를 가진다면 엔티티에 수정이 일어날 때마다 API 스펙을 일일히 변경해줘야한다. 이는 매우 번거로운 작업이며 컴파일 에러로 이를 감지할 수 없기 때문에 에러 원인을 찾기가 어렵다. (DTO를 사용하면 DTO -> 엔티티 과정에서 컴파일 에러가 발생되므로 엔티티의 변경사항을 반드시 파악할 수 있다) 2. 하나의 엔티티에 대해서 API는 여러 개가 존재할 수 있다. -> 각각의 API가 요구하는 엔티티에 대한 데이터는 모두 다를 확률이 높다. 이때, 그냥 엔티티의 모든 정보를 넘겨줘버린다면 필요없는 데이터까지 받긴 하지만 필요한 건 전부 받은 셈이니 기능 동작에는 문제가 없을 것이다. 하지만 PW처럼 보안상 감추어야 할 정보까지 모두 JSON으로 함께 넘어가기 때문에 보안 문제가 발생할 수 있다. 엔티티 측에서 컬럼에 @JsonIgnore를 사용해 JSON 전달을 막을 수는 있지만 이는 엔티티가 API 스펙에 의존성을 갖게 되므로 좋지 않다. 유지보수가 복잡해질 뿐 아니라 다른 API에 대해서는 그때그때 또 변경을 해줘야 하는 쓸 데 없는 번거로움이 발생한다. 3. 엔티티를 그대로 넘겨줄 경우, 엔티티가 가진 정보 외의 것들은 넘겨주지 못한다. -> DTO를 사용하면 엔티티의 정보 외에 추가적으로 필요한 정보도 함께 넘겨줄 수 있다. ************************************************** 이 정도가 될 것 같습니다만.. 제가 놓친 내용이 있을까요??