inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

일대일: 대상 테이블에 외래 키 단방향 관계를 JPA가 지원하지 않는 이유?

해결됨

자바 ORM 표준 JPA 프로그래밍 - 기본편

안녕하세요 강사님. 그림으로만 봐서는 일대다 단방향 과 비슷한 것 같은데, 왜 일대일: 대상 테이블에 외래 키 단방향 은 JPA가 지원하지 않는지 이해가 잘 안됩니다😭 일대다 단방향 일대일: 대상 테이블에 외래 키 단방향

  • JPA
  • java
만두 댓글 2 좋아요 0 조회수 709

port 에대한 질문..

미해결

모든 개발자를 위한 HTTP 웹 기본 지식

안녕하세요 ㅎㅎ 웹 서버의 경우 포트가 http는 80 https 는 443이라고 하셨는데 , 우리가 유튜브로 음악을 듣는 동시에 네이버로 검색을 한다면 둘다 웹 서버를 이용하는 것이고 창이 2개 띄어져 있을텐데 둘다 80 또는 443으로 접속하는 건가요?(중복으로) 아니면 중복 포트는 불가능하니 다른 포트로 접속을 하게 되는건가요? 예를들어 하나는 80 하나는 xx

  • network
김나노 댓글 1 좋아요 0 조회수 326

패킷 순서에 대해 질문이 있습니다.

미해결

모든 개발자를 위한 HTTP 웹 기본 지식

패킷이 크면 전송할 때 조각내서 보낸다고 이해했습니다. 또한, tcp 에 조각낸 패킷의 순서정보 또한 같이 보내는 걸루요 서버 입장에서 받은 패킷과 tcp 순서 정보를 맞춰서, 순서가 잘못됬다고 패킷을 보낸 클라이언트한테 다시 요청하는 부분의 필요성이 이해가 가지 않습니다. 서버가 조각난 패킷의 순서가 잘못됬다는 걸 인지 했다면, 클라이언트 - 서버간 수많은 노드를 거쳐서 다시 보내는 것보다, 서버 내에서 순서정보를 가지고 패킷을 다시 맞추는게 더 좋은게 아닌 건가요..? 패킷이 크면 클수록 저런 왕복을 여러번 해야할 것 같아서요. http 를 공부하는게 처음이라 잘못된 질문일 수 있습니다.

  • network
ryu 댓글 1 좋아요 1 조회수 248

회원 리스트가 안떠요 ㅠㅠ

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

목록페이지를 그냥 들어가면 # 이름 이렇게 잘 뜹니다. 하지만 회원등록을 하고 난 후 회원목록에 들어가면 Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateProcessingException: Could not parse as expression: "${member.id" (template: "members/memberList" - line 19, col 15)] with root cau member.id 를 찾을수없다고 나옵니다 ㅠㅠ

  • MVC
  • spring
  • java
  • spring-boot
부산해미 댓글 1 좋아요 0 조회수 263

역할과 구현

해결됨

실전! 스프링 데이터 JPA

안녕하세요. 방학기간을 통해 스프링에 대해 공부하고 있는 대학생입니다. 다름이 아니라 스프링 핵심원리 강의에서 역할과 구현을 분리하라고 배웠습니다. 그래서 만약 '회원 저장소'를 만든다고 하면 pubic interface MemberRepository{ void save(Member member); Member findById(Long memberId); } 을 만들고 필요한 구현체를 따로 만들었습니다. 메모리를 이용한다면 public class MemoryMemberRepository implements MemberRepository { private static Map<Long, Member> store = new HashMap<>(); @Override public void save(Member member) { store.put(member.getId(), member); } @Override public Member findById(Long memberId) { return store.get(memberId); } } 이런 식으로 만들고, 만약 JPA를 이용한다면 public class MemberJpaRepository implements MemberRepository { @PersistenceContext private EntityManager em; public void save(Member member) { em.persist(member); } public Member findById(Long id) { Member member = em.find(Member.class, id); return member; } } 이런 식으로 만들어서 사용했습니다. 여기서 스프링데이터JPA를 사용하기 위해선 인터페이스에 JpaRepository를 상속받아야하는데 그러면 기존에 있던 MemberRepository에 상속받아서 사용하면 되나요? 그런데 MemberRepository에서 JpaRepository를 상속받게 되면 기존에 MemberRepository 구현체들이 JpaRepository까지 모두 구현해야하는 문제가 있고, MemberReposity에서 사용하는 메소드 이름과 JpaRepository에서 사용하는 메소드 이름이 같으면 MemberRepository를 주입받아 사용하는 다른 클래스에도 문제가 발생했습니다. 이래저래 글이 길었지만 그래서 어떻게 스프링데이터 JPA를 사용하면서 역할과 구현을 구분할 수 있을까요?

  • spring
  • JPA
  • spring-boot
  • java
도토리 댓글 1 좋아요 4 조회수 450

p.245 상속관계 맵핑 3가지 방법 질문

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

조인/ 단일테이블 / 구현클래스마다 테이블 이 세가지 전략에 대한 소스코드를 교재에서 확인할 수 있는데요 세 전략 모두 Item 클래스를 추상클래스로 선언했음에도 아래와 같은 차이를 보입니다. '조인' / '단일테이블' 의 경우에는 ITEM 테이블이 생성된 반면,[그림7.3, 그림7.4] '구현클래스마다 테이블'에서는 ITEM 테이블이 생성되지 않는 것으로 이해되고 있습니다.[그림 7.5] 왜 이런 차이를 발생시키는 것인지 궁금합니다. 별개로, 강의에서는 '조인'/'단일테이블' 설명하실 때 Item클래스를 추상클래스로 선언하지 않으셔서 이 부분도 혼동을 주고있습니다.

  • JPA
  • java
창신동 장첸 댓글 1 좋아요 0 조회수 231

주문취소 테스트시

해결됨

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

주문취소쪽 테스트하다가 궁금한점 있어 질문드립니다. 취소할 주문ID를 조회하고 Order order = orderRepository.findOne(orderId); order.cancel(); 로 주문취소하기 전에 orderItems에 값이 넣어져 있는지 모르겠습니다. Order와 OrderItem은 @OneToMany로 기본이 LAZY 로딩이라 orderItems을 직접 호출하기 전까지는 데이터를 조회하지 않는거로 알고 있는데 어떻게 orderItems에 값이 채워져서 취소가 되는지요?... for (OrderItem orderItem : orderItems ) { orderItem.cancel() ; } 저 for문 시점에 데이터를 조회하면 이해하겠는데 디버깅해보면 order를 조회할때 이미 값이 다 채워져 있습니다...

  • 주문취소
  • JPA
  • 웹앱
  • spring-boot
  • java
  • spring
궁그미 댓글 2 좋아요 0 조회수 287

future에서 deferred를 사용하는이유

해결됨

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

future타입을 deferred로 하면 future를 get하는 시점에 future에 바인딩된 함수를 호출한다는건데 그냥 get하는 시점에 해당함수를 바로호출하면 되는거 아닌가요?

  • network
  • MMORPG
  • windows-server
먹물크림빵 댓글 1 좋아요 0 조회수 349

커맨드와 쿼리의 구분 후 쿼리문 한번 더 실행에서의 궁금증...

미해결

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

강의에서 영한님께서는 커맨드와 쿼리를 구분하는 것을 선호하신다고 하셨습니다. 그래서 알아보니 이런걸 CQRS라고 하던데 회원 정보를 update시 update command 메소드 실행 후 보통같으면 update메소드 자체의 반환값으로 member객체나 member id를 받는데, 이것을 명령과 질의를 구분해 memberService.update() 후 memberService.findOne을 실행하면 결과적으로 쿼리문을 한번 더 실행을 하게 되잖아요? update 메소드 내에서도 findOne이라는 메소드를 호출하니깐요. 이렇게 명령과 질의를 분리하였지만 그 대가로 쿼리문을 한번 더 호출하게 된 셈인데 쿼리문을 한번 더 호출해서 명령과 질의를 구분하는 것이 많이 효율적인 패턴인가요?

  • spring-boot
  • java
  • JPA
  • spring
강낭콩 댓글 1 좋아요 2 조회수 344

no-cache부분의 응답에 대해 질문드립니다.

미해결

모든 개발자를 위한 HTTP 웹 기본 지식

no-cache에서 원서버에 요청시 데이터의 변경이 일어나지 않았을시 false로 304를 내보내는걸로 이해했는데요 원서버와의 네트워크 문제로 연결이 안될시 프록시 서버가 오래된 데이터라도 보여주자라고 해서 응답을 내릴시 똑같이 데이터가 변경이 안되었으니 오래된 데이터 즉 브라우저 내의 캐시를 사용하라고 304를 내보내야되는거 아닌가요? 200을 내보내면 데이터가 수정되었다는 뜻이고 원서버로부터 다시 받아야하는거 아닌가요? 이부분이 이해가 안가서 질문드립니다.

  • network
const.takeo 댓글 1 좋아요 9 조회수 288

자바 코드로 직접 스프링 빈 등록하기 강의 질문

해결됨

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

안녕하십니까? 강사님 수업을 듣는 도 중 똑같이 따라 했는데, Error가 발생해서 질문 드립니다. 먼저 SpringConfig.java 입니다. 위의 Error 내용은 필요 Typedms MemoryMemberRepository인데, 제공된 타입이 MemberRepository여서 Error가 나고 있습니다 MemberService.java 입니다. MemoryMemberRepository.java 입니다. 이렇게 수업대로 따라 했는데, SpringConfig에서 Repository부분에서 Error가 나는데, 왜 나는지가 궁금합니다!

  • java
  • spring
  • MVC
  • spring-boot
댓글 1 좋아요 0 조회수 306

빈연결 에러!

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

SpringConfig에서 문제가 있는데 이유가 뭔지 모르겠습니다! Could not autowire. There is more than one bean of 'MemberRepository' type.Beans:memoryMemberRepository (MemoryMemberRepository.java)springDataJpaMemberRepository (SpringDataJpaMemberRepository.java)

  • spring
  • spring-boot
  • MVC
  • java
velo 댓글 3 좋아요 0 조회수 692

Update 할 때 조건검사(price >= 0) 는 어디서 하는게 좋은 방법일까요?

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

안녕하세요. 너무 좋은 강의 잘 듣고있습니다 !! :) 강의 마지막부분에서 가장 좋은 방법이라고 말씀해주신대로, Service 계층에 ItemUpdateDto 를 추가하고, 엔티티 클래스에 update() 함수도 만들어서 구현을 했습니다. 여기서 한 가지 궁금한점이 생겼는데요, - price >= 0 - stockQuantity >= 0 - name 은 빈 문자열이 아님(StringUtils.hasText == true) 등의 조건을 검사하여 exeception 을 날리거나, update 를 진행하고 싶을 때 조건검사를 어디서 하는 것이 가장 좋은지 고민이 됩니다. 제 생각에는 크게 세가지 방법이 있을 것 같은데요.. 1. Controller 에서 검사하여, 검증된 값만 DTO에 담아서 service 에 전달한다. 2. service 에서 엔티티의 update() 함수를 호출하기전에 검사한다. 3. 엔티티 클래스의 update() 함수 내부에서 검사한다. 세 가지 방법에대해 제가 고민해본 내용을 말씀드리면.. Book 클래스의 removeStock() 처럼 엔티티 내부에서 검사하고, NotEnoughStockException 같은 에러를 날리는 비지니스 로직을 넣어야할까요? (코드에 일관성이 있도록..) --> 3번 그런데, Controller 에서 미리 검사를 하면 굳이 service -> repository 를 타고 내려가서 select 쿼리를 날릴 필요가 없어지기 때문에 성능상 유리할 것 같다는 생각도 듭니다. --> 1번 두 군데에서 다 검사를 하는 것이 좋을까요? 실무에서는 보통 어떤 방법을 채택하는지 궁금합니다 .

  • 웹앱
  • java
  • spring-boot
  • JPA
  • spring
이예슬 댓글 1 좋아요 7 조회수 940

웹과 앱의 상태코드

미해결

모든 개발자를 위한 HTTP 웹 기본 지식

안녕하세요. 양질의 강의 잘 듣고 있습니다. 안드로이드와 스프링 쪽만 건드려봐서 저는 웹 쪽의 지식이 거의 없습니다. 스프링으로 API를 만들어서 웹이 아닌 애플리케이션클라리언트에게 데이터를 넘길 때도 지금 설명하시는 HTTP 상태코드 스펙(100번대 ~ 200번대)을 사용하나요? 지금 약간 혼동이 오는 게 제가 옛날에 교육 받은 곳에서는 아래와 같이 상태 코드를 직접 만들어서 클라이언트와 통신했거든요.. 그럼 아래와 같은 방식으로 하는 건 업계에서 쓰이는 표준을 지키지 않은 건가요? (아래 코드는 상태 코드와 요청에 대한 응답 예시입니다.) package com.example.demo.config ; import lombok. Getter ; /** * 에러 코드 관리 */ @Getter public enum BaseResponseStatus { /** * 1000 : 요청 성공 */ SUCCESS( true , 1000 , " 요청에 성공하였습니다 ." ) , /** * 2000 : Request 오류 */ // Common REQUEST_ERROR( false , 2000 , " 입력값을 확인해주세요 ." ) , EMPTY_JWT( false , 2001 , "JWT 를 입력해주세요 ." ) , INVALID_JWT( false , 2002 , " 유효하지 않은 JWT 입니다 ." ) , INVALID_USER_JWT( false , 2003 , " 권한이 없는 유저의 접근입니다 ." ) , EMPTY_REQUEST_DATA( false , 2004 , " 요청한 값이 DB 에 없습니다 (empty)" ) , // users USERS_EMPTY_USER_ID( false , 2010 , " 유저 아이디 값을 확인해주세요 ." ) , USERS_NO_LOGIN( false , 2011 , " 로그인을 해주세요 " ) , USERS_INVALID_USER( false , 2012 , " 존재하지 않거나 적절하지 않은 사용자입니다 . 유저 상태를 확인해주세요 ." ) , // [POST] /users POST_USERS_EMPTY_EMAIL( false , 2015 , " 이메일을 입력해주세요 ." ) , POST_USERS_INVALID_EMAIL( false , 2016 , " 이메일 형식을 확인해주세요 ." ) , POST_USERS_EXISTS_EMAIL( false , 2017 , " 중복된 이메일입니다 ." ) , POST_USERS_INVALID_GENDER( false , 2018 , " 잘못된 성별입니다 ." ) , POST_USERS_EXISTS_NICKNAME( false , 2019 , " 중복된 닉네임입니다 ." ) , /** * 3000 : Response 오류 */ // Common RESPONSE_ERROR( false , 3000 , " 값을 불러오는데 실패하였습니다 ." ) , // [POST] /users DUPLICATED_EMAIL( false , 3013 , " 중복된 이메일입니다 ." ) , FAILED_TO_LOGIN( false , 3014 , " 없는 아이디거나 비밀번호가 틀렸습니다 ." ) , /** * 4000 : Database, Server 오류 */ DATABASE_ERROR( false , 4000 , " 데이터베이스 연결에 실패하였습니다 ." ) , SERVER_ERROR( false , 4001 , " 서버와의 연결에 실패하였습니다 ." ) , //[PATCH] /users/{userIdx} MODIFY_FAIL_USERNAME( false , 4014 , " 유저네임 수정 실패 " ) , PASSWORD_ENCRYPTION_ERROR( false , 4011 , " 비밀번호 암호화에 실패하였습니다 ." ) , PASSWORD_DECRYPTION_ERROR( false , 4012 , " 비밀번호 복호화에 실패하였습니다 ." ) , /* * 5000: webtoons * */ INTEREST_WEBTOON_STATUS_INVALID( false , 5001 , " 알람 설정을 하기 위해 , 관심 웹툰으로 우선 등록을 해주세요 " ) , INVALID_EPISODE_IN_WEBTOON( false , 5002 , " 해당 웹툰에 속한 에피소드가 아닙니다 ." ) , INVALID_STARSCORE_VALUE( false , 5003 , " 별점 값을 다시 확인해주세요 " ) , ALREADY_EXISTS_STARSCORE( false , 5004 , " 이미 별점이 존재합니다 " ) , WEBTOONS_INVALID_WEBTOON( false , 5005 , " 존재하지 않는 웹툰이거나 적절하지 않는 요청입니다 . 값을 확인해주세요 " ) , EPISODES_INVALID_EPISODE( false , 5006 , " 존재하지 않는 에피소드이거나 적절하지 않는 요청입니다 . 값을 확인해주세요 " ) , HISTORIES_INVALID_HISTORY( false , 5007 , " 요청하신 기록이 존재하지 않습니다 . 다시 확인해주세요 " ) , NO_PAID_EPISODE( false , 5008 , " 구매가 필요한 에피소드입니다 . 구매 후 이용해주세요 " ) ; // 6000 : 필요시 만들어서 쓰세요 private final boolean isSuccess; private final int code; private final String message; private BaseResponseStatus ( boolean isSuccess , int code , String message ) { this .isSuccess = isSuccess ; this .code = code ; this .message = message ; } { "isSuccess" : true , "code" : 1000 , "message" : "요청에 성공하였습니다." , "result" : { "webtoonInfo" : { "webtoonIdx" : 1 , "color" : "#FF001D" , "webtoonProfileImageUrl" : "https://imageUrl_신의탑_434&times;330" , "webtoonName" : "신의탑" , "author" : "SIU" , "synopsis" : "자신의 모든 것이었던 소녀를 쫓아 탑에 들어온 소년 그리고 그런 소년을 시험하는 탑" , "genre" : "판타지" , "age" : "12세 이용가" , "day" : "월요웹툰" , "totalInterestNum" : 8 , "isInterested" : null , "alarm" : null , "paidEpisodeNum" : 3 }, "episodeList" : [ { "episodeIdx" : 6 , "thumbnailImageUrl" : "https://image~~" , "title" : "3부 75화" , "date" : "16일 후 무료" , "avgStarScore" : null , "isWatched" : null , "isPaid" : null , "isLastWatchedEpisode" : null , "cookie" : 2 }, { "episodeIdx" : 5 , "thumbnailImageUrl" : "https://image~~" , "title" : "3부 74화" , "date" : "9일 후 무료" , "avgStarScore" : null , "isWatched" : null , "isPaid" : null , "isLastWatchedEpisode" : null , "cookie" : 2 }, { "episodeIdx" : 4 , "thumbnailImageUrl" : "https://image~~" , "title" : "3부 73화" , "date" : "2일 후 무료" , "avgStarScore" : null , "isWatched" : null , "isPaid" : null , "isLastWatchedEpisode" : null , "cookie" : 2 }, { "episodeIdx" : 3 , "thumbnailImageUrl" : "https://image~~" , "title" : "3부 72화" , "date" : "21.06.13" , "avgStarScore" : "5.55" , "isWatched" : null , "isPaid" : null , "isLastWatchedEpisode" : null , "cookie" : 0 }, { "episodeIdx" : 2 , "thumbnailImageUrl" : "https://image~~" , "title" : "3부 71화" , "date" : "21.06.06" , "avgStarScore" : "5.80" , "isWatched" : null , "isPaid" : null , "isLastWatchedEpisode" : null , "cookie" : 0 }, { "episodeIdx" : 1 , "thumbnailImageUrl" : "https://image~~" , "title" : "3부 70화" , "date" : "21.05.30" , "avgStarScore" : "4.50" , "isWatched" : null , "isPaid" : null , "isLastWatchedEpisode" : null , "cookie" : 0 } ] } }

  • network
강성욱 댓글 1 좋아요 0 조회수 340

Unity 실행이 안됩니다..

미해결

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

NetworkManager 에 script를 추가하고 실행을 하면 Unity가 멈춥니다. NetworkManager를 빼고 실행하면 실행이 되는데 뭐가 문제인지 잘 모르겠네요.. 노트북으로 실습하고 있습니다.

  • network
  • unity
  • C#
미니형 댓글 2 좋아요 0 조회수 347

http통신을 socket 통신이라고 할 수 있나요?

미해결

모든 개발자를 위한 HTTP 웹 기본 지식

영한님 강의를 통해서 열심히 웹공부 중인 학생입니다. 늘 감사하게 강의를 듣고 있습니다! '웹 브라우저 요청흐름' 강의를 통해서, 실시간 기술이 필요한 게임같은 경우를 제외하고 일반적인 요청-응답 방식으로 http통신을 이용한다는 것을 알 수 있었습니다. http 통신 과정에서 os에 내장되어있는 socket 라이브러리를 통해 TCP/IP 프로토콜로 서버와 커넥션(3-way handshaking)하게끔 한다고 하셨는데, 이 부분에서 클라이언트가 TCP 프로토콜을 직접 사용하지 않고, socket 라이브러리가 대행해준 것 (= 간접적으로 사용)이라고 이해하였습니다. 제가 여쭤보고 싶은건, 보통 http 통신과 실시간 socket 통신으로 구분 짓는 경우가 있는데, http 통신도 socket 라이브러리를 이용한다면 큰 범주로 소켓을 사용한 socket 통신이라고 말할 수 있는 것인가요? 그렇게 된다면 socket 통신이 TCP 프로토콜을 직접 사용하는 것이니, http 통신이 TCP 프로토콜을 간접적으로 사용한다는 부분이 이해가 되지 않습니다..! http통신의"소켓" 라이브러리와 실시간 "소켓"통신에서의 소켓이 다른 맥락인것인지.. 감사합니다!

  • socket
  • network
  • http
도넛 댓글 1 좋아요 0 조회수 712

근데 목적지 포트와 목적지 IP는 어떻게 아는거죠?

미해결

모든 개발자를 위한 HTTP 웹 기본 지식

서버에서 응답을 넘겨줄 때는 패킷에 출발지 포트, 출발지 아이피가 적혀 있어서 가능하다는 것을 알겠습니다. 하지만 클라이언트에서 서버로 데이터 전송 시 아이피와 포트번호를 어떻게 알고 보내는 건가요? 아이피는 https://www.google.com << 이 도메인 이름인건가요? 그렇다면 포트는 어떻게 알고 보내죠..? ----------------------------------------------- 추가적으로 질문을 하면서 갑자기 또 궁금한게 생겼습니다. 여기서 말하는 클라이언트와 서버라는게 이해가 잘 가지 않습니다. 예를들어, 프로그램을 짠다고 했을때 제가 아는건 html,css,javascript의 front 쪽에서 Java, oracle 등 back으로 데이터를 넘겨주고, 그 데이터를 처리한 값을 다시 front로 넘겨주는 걸로 알고 있습니다. 이때, front가 클라이언트, back이 서버가 되는게 아닌가요..? 근데 마치 예시에서는 클라이언트가 이 컴퓨터, 서버는 저 컴퓨터 같은데 이런 개념이 잡히지가 않네요. 혹시 이부분에 대해 도움 받을 수 있을까요?

  • network
댓글 1 좋아요 0 조회수 2826

프록시 캐시 서버에 관련해 질문 있습니다.

미해결

모든 개발자를 위한 HTTP 웹 기본 지식

안녕하세요. 개발자님. 만약에 no-cache, must-revalidate 등을 쓴다면 프록시 서버를 거쳐도 무조건 원 서버에 확인이 필요하니까 클라이언트의 웹 브라우저와 원서버가 직접 연결이 된 경우보다 프록시 서버가 있는 쪽이 오히려 더 비효율적일 수도 있을거 같네요. 이 부분에 대해서 궁금합니다. 감사합니다.

  • network
댓글 1 좋아요 1 조회수 241

JSP 파일이 Java 코드로 변환된 파일 경로에 대한 질문입니다.

해결됨

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

안녕하세요, JSP를 사용한 회원 관리 프로젝트를 진행하던 중 궁금한 것이 생겨 질문드립니다. JSP도 결국에는 프로젝트 실행시 Java 코드로 변환이 되는 것으로 알고 있는데요. 이전에 개인적으로 Eclipse IDE를 사용한 경우 .metadata라는 폴더가 존재했고, 그 안을 들여다 보면 JSP가 Java 코드로 변환된 파일이 존재했습니다. 예를 들어 "sum.jsp" 파일을 작성했다면 "sum_jsp.java" 파일이 존재한 것 처럼요. (이 .java 파일안에서 pageContext, session, application 객체를 사용할 수 있도록 선언되어 있었던 것도 기억이 나네요.) 어느덧 IntelliJ에 익숙해져서 이런 내용을 잊어버린체 코딩을 하는 것 같아 제가 작성한 JSP 파일에 대해 Java 코드로 변환된 파일을 찾아보고 싶은데, 어떤 경로를 통해 찾을 수 있을까요? 미리 답변 감사드립니다.

  • jsp
  • spring
  • java
  • MVC
Henu 댓글 1 좋아요 3 조회수 1716

인기 태그

인프런 TOP Writers

주간 인기글