묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
요청마다 스레드 생성할 시, 같은 프로세스 내의 스레드인가요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]요청마다 스레드를 생성하는 이 그림에선 2개의 스레드가 서로 다른 요청1, 2를 처리하고 있잖아요? 근데 이 두 스레드는 하나의 프로세스 내에 있는 건가요? 아니면 서로 다른 프로세스에 있는 스레드들인가요?만약 하나의 프로세스 내에 2개의 스레드가 있는 경우라면, 스레드1에서 오류가 나면 스레드2도 영향을 받는다고 운영체제 공부하면서 배운 것 같은데 그럼 위 그림은 서로 다른 프로세스에서 생성된 스레드라고 생각하면 될까요? 그런데 스레드가 생성될 때마다 프로세스가 생성된다면 프로세스가 수십 수백 개가 될 수도 있다는 말인데 이건 말이 안 되는 것 같기도 해서.. 헷갈리네요. (학습 자료에 나온 요청마다 스레드 생성의 장점으로 '하나의 쓰레드가 지연되어도, 나머지 쓰레드는 정상 동작한다.'라는 말이 있어서 갑자기 궁금해졌네요. 물론 지연이랑 오류랑 다른 거긴 하지만요)
-
미해결Practical Testing: 실용적인 테스트 가이드
teardown 시 @AfterEach 주의
혹시나 저와 같은 이슈를 만나셨을 분이 있으실까봐 글을 남깁니다.강의 36:36 에서 강사님께서 teardown 을 정의해주실 때 @AfterEach 를 사용해서 매 테스트가 종료될때마다 db 를 깔끔하게 지워주도록 정의해주셨습니다.해당 클래스( ProductServiceTest.class) 에서 실행할 때는 문제가 되지 않고 정상적으로 작동을 합니다.그러나 다른 테스트(ex, OrderServiceTest.class) 에서는 @BeforeEach 를 사용해서 teardown 을 구현했는데 이 때문에 간극이 생겨 전체 테스트 를 돌렸을때 ProductServiceTest.class 에서 에러 가 발생합니다.따라서 @BeforeEach 로 변경하여서 해결할 수 있었습니다.
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
초반 프로젝트 설정 (build 관련)
안녕하세요인텔리제이에서 프로젝트를 open>build>LibraryAppApplication run을 하면 아래 화면에서 더이상 진행되지 않습니다.Started LibraryAppApplication in 3.292 seconds (JVM running for 3.791) 라는 메세지가 마지막에 출력되나좌측에 상태를 보면 '빌드 중'으로 계속 출력되고 있습니다. 추가로 확인해봐야 하는 설정이 있으면 안내 부탁드립니다.
-
해결됨토비의 스프링 부트 - 이해와 원리
4섹션 스프링컨테이너로 통합 재생이 안됩니다.
계속 무한 로딩만 뜨고 재생이 안됩니다. ㅠ+같은 섹션 'SpringBootApplication' 도 재생이 안되고 있습니다.
-
해결됨스프링 프레임워크는 내 손에 [스프1탄]
강의내용대로 실행중인데 boardForm.do가 안나옵니다.
어디가 잘못된건지 못 찾겠습니다. 일단 boardList.jsp 에 boardForm.do를 작성했는데 저는 계속해서 404에러와 아래 문구가 콘솔창에 찍힙니다. 도와주세요. 제 눈에는 잘못된 부분이 보이지 않습니다.... 현재 화면을 캡처해서 올립니다.servlet-context.xmlBoardControllerboardList.jspboardForm.jsproot-context.xml결과창 : boardList는 잘 나옵니다.
-
미해결스프링 핵심 원리 - 기본편
섹션 9 정리한거 맞는지 확인 해주세요 !!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. request 스코프 빈의 포록시 기반 동작 원리에 대해서 강의도 듣고, 따로 찾아봐서 정리했는데 맞는지 봐주세요. !! 스프링 컨테이너가 초기화될 때, ScopedProxyMode.TARGET_CLASS 설정을 사용하면, 스프링은 원본 클래스를 상속받는 프록시 클래스의 인스턴스를 생성한다. 이 프록시 클래스는 원본 클래스의 모든 메서드를 오버라이드하고, 오버라이드된 각 메서드에는 실제 원본 빈의 메서드를 호출하는 위임 로직이 포함되어 있다. 생성된 프록시 객체는 스프링 빈으로 스프링 컨테이너에 등록되고, HTTP 요청이 있을 때, 클라이언트가 프록시 객체의 메서드를 호출하면, 메서드 내의 위임 로직이 활성화되어 실제 해당 HTTP 요청에 맞는 원본 빈의 해당 메서드를 (찾아) 실행한다. 만약, 해당 HTTP 요청에 맞는 실제 원본 빈이 스프링 컨테이너에 없으면, 위임 로직은 새로운 원본 빈 인스턴스를 생성하여 스프링 컨테이너에 등록한 후, 그 인스턴스의 메서드를 실행한다.맞나욤.. ㅎㅎ
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
spring 이 뜬다고 하셨는데 그 의미가 궁금합니다.
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예. 검색해도 안나와서 올렸습니다.3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요."스프링이 뜬다" 라고 하셨는데톰캣서버가 기동되는거라고 이해하면 되나요? 그리고 @controller 어노테이션을 지정해두면스프링이 떴을 때 해당 컨트롤러에 대한 인스턴스를 생성해서담아둔다고 하셨는데 이건 스프링 컨테이너에 담겨있는 걸로 보면 되나요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
jsessionid가 url에 있을때 404에러
세션을 지우고,로그인을 하면 세션이 만들어져야하는데 세션은 만들어졌는데 url에 jsessionid가 들어가면 404 에러가 나오네요이유가 멀까요 해결하신분 없나요세션을 안 지우고하면 에러는 안뜹니다 ps. 코드 문제일수도 있다 생각되어 ,강의자료에 있는 애초에 완성되있는 완성본 코드로 실험한 결과도 역시나 결과는 같았습니다. 실제로 쓸때는 session.tracking-modes를 넣을꺼라 문제는 없겠지만 정책이 바뀐건지 강의랑다르게 404에러가 나와서 답답하네요,,참고로 제 부트 버전은 3.1.5 입니다
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
이스케이프 예시를 조금 변형하다 이해가 안 가는 부분이 있어 질문드립니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.제가 이해하기로는 모델에 담긴 "Hello <b>Spring</b>"이라는 문자열을 꺼내서 ${data} 대신에 들어간다고 생각했습니다.그래서 html 코드에서 ${data}를 지우고 이 자리에 "Hello <b>Spring</b>"를 바로 넣어봤는데 오류가 납니다.두 경우에는 어떤 차이가 있는 건가요? 왜 오류가 나는지 알 수 있을까요
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
도와주세옹/http://localhost:8080/hello
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용]http://localhost:8080/hello안들어가져요 ㅠㅠ다시보기 계속해도 답이 안나와서 질문글 올립니다
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
에러가 발생했는데 원인을 모르겠습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@545d2560 testClass = hello.spring.hello.service.MemberServiceIntegrationTest, locations = [], classes = [hello.spring.hello.HelloApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@61001b64, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@4b8ee4de, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4659191b, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@3527942a, org.springframework.boot.test.context.SpringBootTestAnnotation@5891170b], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null]테스트 실행시 이런 오류가 발생했습니다.Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect')caused by는 위처럼 나왔습니다.설정의 오류인것 같은데 무슨 설정의 오류인지 모르겠고 어떻게 설정해줘야 하는지 모르겠습니다.
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
@Transactional는 프록시 객체를 스프링 빈으로 등록까지 해주나요?
질문 있습니다.강의 자료를 보면 "@Transactional 애노테이션이 특정 클래스나 메서드에 하나라도 있으면 트랜잭션 AOP는 프록시를 만들어서 스프링 컨테이너에 등록한다" 라고 되어 있습니다. (11페이지 마지막줄) 그런데 서포터님의 답변 중 강의 자료와 조금 다르게 해석되는 말씀이 있어 질문 드립니다. 저는 @Transactiona이 있으면 생성과 스프링 빈 등록까지 해주는 것으로 이해했는데, 그게 아니라 프록시 객체 생성까지만 하고, 스프링 빈 등록은 따로 해줘야 하는 건가요??
-
미해결스프링 핵심 원리 - 기본편
빈 소멸
public class SingletonTest { @Test void singletonBeanFind(){ AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SingletonBean.class); SingletonBean singletonBean1 = ac.getBean(SingletonBean.class); SingletonBean singletonBean2 = ac.getBean(SingletonBean.class); System.out.println("singletonBean1 = " + singletonBean1); System.out.println("singletonBean2 = " + singletonBean2); ac.close(); System.out.println("singletonBean2 = " + singletonBean2); } @Scope("singleton") static class SingletonBean { @PostConstruct public void init(){ System.out.println("singletonBean.init"); } @PreDestroy public void desrtoy(){ System.out.println("singletonBean.desrtoy"); } } } 스프링 컨테이너가 close() 메서드로 종료될 시점에 컨테이너는 빈 객체의 소멸을 처리한다라고 알고있습니다. 그런데 close() 이후에 singletonBean의 참조변수를 출력해보면 null이 아니라 빈의 참조값이 출력되는 이유가 먼가요? 제가 잘못 알고있는 부분이 궁금합니다아래는 Test 결과 입니다singletonBean.initsingletonBean1 = hello.core.scope.SingletonTest$SingletonBean@530712dsingletonBean2 = hello.core.scope.SingletonTest$SingletonBean@530712dsingletonBean.desrtoysingletonBean2 = hello.core.scope.SingletonTest$SingletonBean@530712d
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
CSR과 SSR이 아직 확실히 이해되지 않아 질문드립니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]위의 두 가지 상황, '정적 리소스를 제공하는 상황'과 '동적으로 HTML을 생성해서 제공하는 상황' 모두 SSR인가요? 그럼 이 세 가지 경우엔 어떤가요?'웹 클라이언트 to 서버 상황'은 CSR인 것 같기도 하고..'앱 클라이언트 to 서버 상황'도 CSR..? 같은데 확신이 안 드네요.'서버 to 서버'는 CSR과 SSR 중 뭐에 해당하나요? 결론적으로 다섯 가지 상황 각각이 CSR과 SSR 중 무엇에 해당하는지 궁금합니다. 제가 잘못 이해하고 있는 부분이 있을지도 몰라서 질문드립니다.
-
미해결스프링 부트 - 핵심 원리와 활용
[intellij 무료버전]tomcat runner 실행 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 캐시 삭제도 해봤고,인텔리제이 버전도 22.3.3으로 내렸습니다. 여전히 run configuration에서 이렇게밖에 뜨지 않습니다ㅠ 추가로 build.gradle에 복붙하는 코드에서 이런 게 뜨는데, 상관이 있는 걸까요?ㅠ
-
미해결스프링부트 시큐리티 & JWT 강의
Consider defining a bean of type 'org.springframework.security.crypto.password.PasswordEncoder' in your configuration.
@Configuration public class BCryptConfig { @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } } 위와 같이 Config class에 PasswordEncoder 빈을 생성했는데도 Description:Parameter 1 of constructor in domain.Member.service.MemberService required a bean of type 'org.springframework.security.crypto.password.PasswordEncoder' that could not be found.Action:Consider defining a bean of type 'org.springframework.security.crypto.password.PasswordEncoder' in your configuration.Process finished with exit code 1 와 같이 에러가 발생하면 어떻게 해야할까요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
DTO 질문입니다.!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 강의 잘 보고있습니다, ModelAttribute로 받은 HelloData객체를 받을 때 url의 username과 DTO 안에 username이 같아야 하나요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
MemberForm에 자동으로 name이 저장된 이유를 모르겠습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 스프링 공부하다가 궁금한 점이 생겼습니다.아래의 코드에서 MemberForm에 직접 name을 저장한 적은 없는데 form에 name이 저장된 이유는 Controller에 create 메서드가 포함되어 있고 그 메서드가 MemberForm을 매개변수로 받기 때문에 spring이 MemberForm의 name을 관리해주는 건가요? @PostMapping("/members/new") public String create(MemberForm form) { System.out.println(form.getName()); Member member = new Member(); member.setName(form.getName()); memberService.join(member); return "redirect:/"; }
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
부분 업데이트시 PATCH vs POST
회원 수정 API 관련해서 강의 자료 오류 정정부분에 PUT은 전체 업데이트 시 사용하는 것이고, 부분 업데이트 할 때는 PATCH나 POST를 사용하는 것이 맞다고 나와있는데 실무에서는 PATCH나 POST중에 어떤 것을 더 많이 사용하나요? 개인 프로젝트시에 참고하고 싶어 질문드립니다!
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
콘솔 한글 깨짐
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)아니요2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)아니요3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]여기에 질문 내용을 남겨주세요.다른 프로젝트를 실행하면 콘솔에 한글이 안 깨지는데 해당 강의 대로 진행한 프로젝트는 한글이 깨집니다.https://velog.io/@hsjung2015/Intellij-or-Eclipse%EC%BD%98%EC%86%94%EC%B0%BD%EC%97%90-%ED%95%9C%EA%B8%80%EC%9D%B4-%EA%B9%A8%EC%A0%B8%EC%84%9C-%EB%82%98%EC%98%AC%EB%95%8C-%EC%B5%9C%ED%9B%84%EC%9D%98-%EB%B0%A9%EB%B2%95해당 사이트에 있는 3번까지 진행 했는데 한글이 깨지네여 ㅠㅠ package hello.servlet.basic.request; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.Cookie; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet(name = "requestHeaderServlet", urlPatterns = "/request-header") public class RequestHeaderServlet extends HttpServlet { @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { printStartLine(request); printHeaderUtils(request); printEtc(request); response.getWriter().write("ok"); } private static void printStartLine(HttpServletRequest request) { System.out.println("--- REQUEST-LINE - start ---"); System.out.println("request.getMethod() = " + request.getMethod()); System.out.println("request.getProtocol() = " + request.getProtocol()); System.out.println("request.getScheme() = " + request.getScheme()); System.out.println("request.getRequestURL() = " + request.getRequestURL()); System.out.println("request.getRequestURI() = " + request.getRequestURI()); System.out.println("request.getQueryString() = " + request.getQueryString()); System.out.println("request.isSecure() = " + request.isSecure()); //https 사용 유뮤 System.out.println("--- REQUEST-LINE - end ---"); System.out.println(); } private void printHeaderUtils(HttpServletRequest request) { System.out.println("--- Header 편의 조회 start ---"); System.out.println("[Host 편의 조회]"); System.out.println("request.getServerName() = " + request.getServerName()); //Host 헤더 System.out.println("request.getServerPort() = " + request.getServerPort()); //Host 헤더 System.out.println(); System.out.println("[Accept-Language 편의 조회]"); request.getLocales().asIterator() .forEachRemaining(locale -> System.out.println("locale = " + locale)); System.out.println("request.getLocale() = " + request.getLocale()); System.out.println(); System.out.println("[cookie 편의 조회]"); if (request.getCookies() != null) { for (Cookie cookie : request.getCookies()) { System.out.println(cookie.getName() + ": " + cookie.getValue()); } } System.out.println(); System.out.println("[Content 편의 조회]"); System.out.println("request.getContentType() = " + request.getContentType()); System.out.println("request.getContentLength() = " + request.getContentLength()); System.out.println("request.getCharacterEncoding() = " + request.getCharacterEncoding()); System.out.println("--- Header 편의 조회 end ---"); System.out.println(); } private void printEtc(HttpServletRequest request) { System.out.println("--- 기타 조회 start ---"); System.out.println("[Remote 정보]"); System.out.println("request.getRemoteHost() = " + request.getRemoteHost()); // System.out.println("request.getRemoteAddr() = " + request.getRemoteAddr()); // System.out.println("request.getRemotePort() = " + request.getRemotePort()); // System.out.println(); System.out.println("[Local 정보]"); System.out.println("request.getLocalName() = " + request.getLocalName()); // System.out.println("request.getLocalAddr() = " + request.getLocalAddr()); // System.out.println("request.getLocalPort() = " + request.getLocalPort()); // System.out.println("--- 기타 조회 end ---"); System.out.println(); } }