묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
리소스가 정확히 뭔가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]저번 HTTP 웹지식 강의에서는 리소스가 명사? 라고 했던거 같은데 여기서는 정적 리소스, 동적리소스라고 하니깐 리소스가 정확히 뭔지 감이 안 잡히네요. 완벽히 짖고 넘어가고 싶네요
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
log에 빨간줄
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]log에 빨간줄이 그어지고 test를 돌려도 log 기록이 남지 않는데 무엇이 문제일까요?
-
미해결스프링 부트 - 핵심 원리와 활용
@WebServlet 관련 질문 사항
서블릿 컨테이너 초기화2에서 설명하시기를 서블릿을 등록하는 방법@WebServlet을 사용하는 방법프로그래밍 방법이렇게 두 가지가 있다고 말씀해주셨는데 2번 같은 경우에는 서블릿을 만들고 서블릿 컨테이너에 해당 서블릿을 올린다 라는 느낌으로 이해를 했습니다. 그런데 첫번째 방법 같은 경우에는 서블릿을 등록한다 라고만 해서 약간 이해가 되지 않습니다 제가 생각할때는 서블릿 컨테이너가 있어야 하고 서블릿이 등록이 되어야 하는데 2번째는 서블릿 컨테이너를 만들고 거기에 등록을 했으니까 되는건데 첫번째는 어떤 서블릿 컨테이너에 등록이 되는건가요?? 또한 @WebServlet이 여러개가 있다면 각각은 다른 서블릿 컨테이너에 등록되는건지 같은 서블릿 컨테이너에 등록 되는건지 궁금합니다
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
Mybatis에서 Connection의 생명주기 및 Pooling Proxy객체
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]제목과 같습니다.Mybatis에서의 Connection 생명주기와커넥션풀을 연동했을때의 Connection 생명주기가 궁금합니다.Mybatis에서 커넥션풀을 적용한다고 가정합니다.만약 하나의 기능 즉, 하나의 쓰레드 단위로 쿼리를 호출하는 매퍼 메소드를 4번 호출한다면 이때 커넥션은 Mapper를 통해 호출하는 DAO 메소드 단위로 Pool에서 4번 꺼내는것인지?만약 그렇다면, 4번 꺼내는 객체들이 앞서 배운 내용처럼 처음 Pool에서 꺼내서 사용하고 반환한 동일한 Connection 객체를 다시 꺼내어 재사용 하는건지 궁금합니다!또한 Transcation Rollback 되는것도 동일한 Connection, 동일한 Session에 의한것과 연관성이 있는건지도 궁금합니다.제가 이해한 부분은 아래와 같습니다.커넥션풀을 사용하면 커넥션풀에 각각 다른 커넥션이 생성됨(10개)하나의 커넥션당 하나의 세션이 생성되며, 커넥션의 생명주기에 종속되어 있다.세션은 트랜잭션을 시작하고 커밋을 관리한다.커넥션 풀을 사용하면 하나의 스레드내에 각각의 쿼리에 대한 작업 단위가 동일한 커넥션을 반환받는다.커넥션이 동일하다면 세션도 동일하므로 하나의 트랜잭션으로 관리된다?이게 맞을까요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
시스템 os locale 과 intellij default locale이 다릅니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]intellij 에서 로케일 티폴트를 찍으면 en-us라고 나오는데시스템 os locale은 한국입니다.locale.korea 라고 했을 때 messages_kr 파일이 없어 messages.properties(디폴트)를 먼저 찾아 테스트가 동작한다는 설명은 이해했습니다. (locale null 대신 locale.korea로 테스트성공) 하지만 null값으로 주게 되면 시스템 os 를 먼저 찾고(저의 경우 kr) -> messages_kr이 없으니 그대로 messages.properties를 찾을 줄 알았으나 messages_en.properties를 계속해서 참조했습니다. (아래) default값을 찍어보니 맨 위 사진처럼 intellij에서 디폴트값을 us로 인식하고 있었습니다. 혹시 어떻게 해결해야 할까요?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
KeyHolder 질문
@Override public Item save(Item item) { String sql = "insert into item (item_name, price, quantity) " + "values(:itemName, :price, :quantity)"; SqlParameterSource param = new BeanPropertySqlParameterSource(item); KeyHolder keyHolder = new GeneratedKeyHolder(); template.update(sql, param, keyHolder); long key = keyHolder.getKey().longValue(); item.setId(key); return item; } KeyHolder같은경우 id를 내부에서 직접 구성해줘야하기 때문에 쓰는거라고 알고있는데 서버를 열어서 추가를 해줄때마다 숫자가 증가되는걸 볼수있었습니다. 숫자가 증가되는건 코드에서 자체적으로 해주는건가요?항상 답변감사드립니다.
-
미해결스프링 핵심 원리 - 기본편
service, repository에서 memberId의 타입을 Long으로 선언한 이유
MemberService의 findMember()와 MemberRepository의 findById()에서 매개변수 memberId의 타입을 long이 아닌 Long으로 선언한 이유가 궁금합니다. Member 클래스를 선언할 때 id 필드의 타입이 long이 아닌 Long인 이유는 다음 글을 통해 알 수 있었는데, 이 메서드들에서 memberId의 타입을 long이 아닌 Long으로 선언한 이유는 무엇인가요?
-
해결됨스프링 핵심 원리 - 기본편
역할과 구현 분리 이유
역할과 구현을 분리하는 이유가 궁금한데요. 어떤 역할(ex. 회원 데이터 저장하기)에 대한 구현 방법이 여러가지이기 때문인가요? (구현 방법이 여러가지라면 구현법을 변경할 가능성이 있기에) 이게 역할과 구현을 분리하는 이유인가요?그렇다면 어떤 역할에 대한 구현 방법이 단 1가지라면 역할과 구현을 분리하지 않아도 되는 것인가요? 만약 그렇다면 '구현체가 1개인 경우에는 인터페이스명 + Impl을 클래스명으로 하는 것이 관례'라는 관례가 존재하는 이유가 무엇인가요? 구현체가 단 1개라면 인터페이스-클래스가 아닌 클래스만 존재하면 되는거 아닌가요...?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
저만 어려운걸까요..
자바 기본 입문,스프링 기본,입문, HTTP까지는 무난무난하게 재밌게 다 이해하며 왔는데Model 추가 V3부터 정말 이해가 하나도안되요....처음엔 다 그런걸까요
-
미해결쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
이너 클래스 vs 클래스 별도 생성의 차이?
[4-5 맛집 정보 가져오기 API 개발하기]맛집 정보 가져오기 API 부분 코드 작성해 주시는 부분에서 (2분 34초쯤부터)메뉴 클래스를 하나 더 만드실지 고민하시는듯 하다가 이너 클래스로 만드신 것처럼 보이는데요,이전에 request 만드실때는 메뉴 클래스를 분리하셨는데해당 부분에서는 고민하시다가 이너 클래스로 만드신 이유가 무엇인지그리고 어떤 경우에 이너 클래스를 쓰고 분리를 하는지 궁금해서 문의드립니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
html 관련 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]<b> </b> 태그가 이스케이프 처리되어서, html 코드가 웹 브라우저에 <와 같은 문자로 이스케이프 되는 것으로 이해했습니다.이때 그러면 다른 태그들 <head>, <li>와 같은 코드도 그러면 모두 저런 문자의 형태로 다 이스케이프 처리되어서 웹 브라우저에 내려가야하는 것 아닌가요? 클라이언트에서 어떤 입력값을 서버로 넘겨줄때, <script>와 같은 값을 넘겨주면 이상한 스크립트를 서버에서 실행시킬 위협이 있어서 이를 방지하기 위해 이스케이프 처리를 한다는 것 같은데, 서버 -> 클라이언트로 이스케이프인지 클라이언트 -> 서버 이스케이프인지.. 뭔지 개념이 헷갈리네요 ㅜㅜ
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
yml 설정 내용 공유
혹시 귀찮으신분들 있으실까봐 공유드립니다.2칸(뎁스) 는 주의부탁드려요 spring: jpa: hibernate: ddl-auto: create show-sql: true datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/stock_example username: root password: 1234 # JPA 쿼리가 어떻게 나가는지 logging: level: org: hibernate: SQL: DEBUG type: descriptor: sql: BasicBinder: TRACE
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
수정시에 질문있습니다!!!! Editor??
[질문 내용]여기에 질문 내용을 남겨주세요. 저는 지금까지 수정을 시도할때 changeContentsAndtitle 이런 식으로 엔티티단에서 수정을 시도했는데 https://velog.io/@gundorit/Spring-%EC%A0%9C%EB%8C%80%EB%A1%9C-%EB%90%9C-CRUD-Update 이 블로그에 따르면 그것은 별로 안좋고 Editor 를 선언해서 하면 좋다는 식으로 얘기하고 있습니다. 근데 이렇게 하면 영한님이 얘기하셨던 얘기 중에 그런 이야기가 있었습니다. DTO 는 엔티티를 참조해도 되는데 , 엔티티는 DTO 를 참조하지 말라고 하셨습니다.위 블로그에서는 Entity 에서 DTO 를 참조하지는 않는데 Entity 에서 UpdateEditor 를 선언하고 있는데 이런 부분에 문제는 없을까요?? 영한님도 이런 스타일로 하시나요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
프론트컨트롤러 -V1 강의에서
@WebServlet(name = "frontControllerServletV1", urlPatterns = "/front-controller/ v1/*") public class FrontControllerServletV1 extends HttpServlet { private Map<String, ControllerV1> controllerMap = new HashMap<>(); public FrontControllerServletV1() { controllerMap.put("/front-controller/v1/members/new-form", new MemberFormControllerV1()); controllerMap.put("/front-controller/v1/members/save", new MemberSaveControllerV1()); controllerMap.put("/front-controller/v1/members", new MemberListControllerV1()); } @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("FrontControllerServletV1.service"); String requestURI = request.getRequestURI(); ControllerV1 controller = controllerMap.get(requestURI); if (controller == null) { response.setStatus(HttpServletResponse.SC_NOT_FOUND); return; } controller.process(request, response); } } 이 코드에서 웹에서 url을 입력해서 requestURL에 들어와 그 URL에 맞는 컨트롤러를 호출한다 이거는 이해를 했습니다.근데 프public FrontControllerServletV1() 생성자를 호출해야 하는거아닌가요..?갑자기 여기서 막혀서 이해가안가네요..
-
해결됨스프링 DB 1편 - 데이터 접근 핵심 원리
커넥션 생성
초기에 트랜잭션이 시작되면 커넥션은 누가 얻어오는건가요?Repository에서DataSourceUtils.getConnection(dataSource); 실행되고 doGetConnection 메서드에서ConnectionHolder conHolder = (ConnectionHolder) TransactionSynchronizationManager.getResource(dataSource); Connection con = fetchConnection(dataSource);이렇게 얻어오는거같은데 트랜잭션 동기화매니저가 커넥션을 얻어오고 이 커넥션을 트랜잭션 매니저가 사용하는건가요??
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
JPA와 DB설정, 동작확인 강의에서 오류메세지 발
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]제가 오류를 못찾는건지 자료랑 비교했을 때 별 특이사항은 없는 것 같은데 자꾸 오류가 발생합니다.MEMBER_SEQ이 대체 뭔지 모르겠네요 ㅠㅠ 젤 하단 사진 테스트코드 실행 시 오류가 발생합니다. application.yml server: port: 8081 #MVCC=TRUE를 넣어주면 여러개를 한번에 접근했을 때 좀 더 빨리 처리가 된다. spring: datasource: url: jdbc:h2:tcp://localhost/~/jpashop username: sa password: driver-class-name: org.h2.Driver #ddl-auto: create -> 자동으로 테이블을 만들어주는 모드 jpa: hibernate: ddl-auto: create properties: hibernate: # show_sql: true System.out.~을 통해서 출력 format_sql: true #logger를 통해 출력 #로그 레벨 #hibernate SQL로그를 디버그 모드로 쓴다는 것 #-> Hibernate가 남기는 모든 로그가 다 디버그 모드로 해서 JPA나 Hibernate가 생성하는 SQL이 다 보인다. logging: level: org.hibernate.SQL: debug Memberpackage jpabook.jpashop; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; import lombok.Getter; import lombok.Setter; @Entity @Getter @Setter public class Member { @Id @GeneratedValue private long id; private String username; }MemberRepositorypackage jpabook.jpashop; import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; import org.springframework.stereotype.Repository; @Repository public class MemberRepository { @PersistenceContext private EntityManager em; public Long save(Member member){ em.persist(member); return member.getId(); } public Member find(Long id){ return em.find(Member.class,id); } }MemberRepositoryTestpackage jpabook.jpashop; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.transaction.annotation.Transactional; import static org.assertj.core.api.Assertions.*; import static org.junit.Assert.*; @RunWith(SpringRunner.class) //junit한테 SpringBoot로 테스트 한다고 알려주는 것 @SpringBootTest public class MemberRepositoryTest { @Autowired MemberRepository memberRepository; @Test @Transactional public void testMember(){ //given Member member=new Member(); member.setUsername("memberA"); //when Long saveID= memberRepository.save(member); Member findMember=memberRepository.find(saveID); //then assertThat(findMember.getId()).isEqualTo(member.getId()); assertThat(findMember.getUsername()).isEqualTo(member.getUsername()); } }
-
미해결스프링 핵심 원리 - 기본편
런 실행 sysout이 안돼요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기서 java나 스프링 부트가 떠야하는데 안떠요ㅜ 프로젝트를 잘못 만든건가요? 전체파일 스프링부트 실행했을때 스프링 실행은 되는데,process finished with exit code 0 은 안뜹니다.뭐가 문제죠?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
url 링크가 변경되지 않는 이유가 궁금합니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]WAS에서 /error-page/500 경로로 요청을 다시 하면 url 링크도 변경될 거라고 생각했는데 변경되지 않는 이유가 궁금합니다.
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
src/test/resources 에 application.properties
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]이전 수업까지datasource를 저희가 주입하는게 아닌 properties 파일로 자동으로 주입받을 때 src/test/resources 를 만든적이 없는걸로 기억합니다. 그런데도 에러 없이 잘 돌아갔었는데 src/test/resources 를 만들어서 분리하는 순간 src/test/resources에 있는 properties 파일은 src/test 를 위한 설정 파일이 되는건가요? 만약 src/test/resources를 만들지 않았다면 src/main에 있는 설정 정보를 그대로 src/test에서도 끌어다 쓰는건가요?
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
실제 테스트
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예[질문 내용]강의 잘 듣고 있습니다. 현재는 h2 database를 사용해서 구현하는 테스트인데 실제로 테스트 할 때 데이터베이스를 건들면 문제가 생길 것같습니다. 그럴 때에는 어떤 방식으로 테스트를 진행하나요??