========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 문제2에서 AuthGradeMain1 클래스를 만들어서 코드를 작성하는 과정에서 for문 안에서 바로 출력을 하는 코드를 작성하셨는데, EnumRefMain3_4에서 public static void main(String[] args) { int price = 10000; Grade[] grades = Grade.values(); for (Grade grade : grades) { printDiscount(grade, price); } } private static void printDiscount(Grade grade, int price) { System.out.println(grade.name() + " 등급의 할인 금액 : " + grade.discount(price)); } 따로 print 메서드를 뽑아서 리팩토링 하셔서 제가 스스로 AuthGradeMain1 풀이할 때에도 public static void main(String[] args) { AuthGrade[] grades = AuthGrade.values(); for (AuthGrade grade : grades) { printAuthGrade(grade); } } private static void printAuthGrade(AuthGrade authGrade) { System.out.println("grade = " + authGrade + ", level = " + authGrade.getLevel() + ", 설명 = " + authGrade.getDescription()); } 이런 식으로 메서드를 뽑아서 풀었습니다. 결과는 결국 똑같이 나오겠지만 메서드를 뽑아서 print하는 코드와 for문에서 직접 print하는 코드 둘 중 어느 걸 사용하는 것이 좋은 건지 어떻게 알 수 있는 걸까요?
안녕하세요 공부를 하던 중 동작순서가 헷갈려서 질문 남깁니다. 회원가입을 예로 들어 질문하면 회원가입 버튼을 눌렀을 때, GetMapping의 url로 화면을 보여주고 사용자가 내용을 작성하면, 작성한 데이터를 th:action으로 인해 PostMapping url로 다시 돌아가 데이터가 ModelAttribute에 있는 객체에담겨 @Validated로 검증 후 오류가 있으면 bindingresult로 담아 다시 addform으로 보내 오류 메세지를 화면에 출력하고 오류가 없으면 홈화면으로 보내는 것 맞을까요 ??
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx ) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG ) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] @BatchSize 사용시 IN 쿼리 발생 시점에 과정이 궁금해서 질문 남깁니다. Team teamA = new Team(); teamA.setName("teamA"); Team teamB = new Team(); teamB.setName("teamB"); em.persist(teamA); em.persist(teamB); User user1 = new User(); user1.setUsername("user1"); user1.setTeam(teamA); em.persist(user1); User user2 = new User(); user2.setUsername("user2"); user2.setTeam(teamA); em.persist(user2); User user3 = new User(); user3.setUsername("user3"); user3.setTeam(teamB); em.persist(user3); em.flush(); em.clear(); List<Team> result = em.createQuery("select t from Team t", Team.class) .getResultList(); System.out.println("=============================="); for (Team team : result) { System.out.println("team.getUsers().size() = " + team.getUsers().size()); } result에서 조회된 team들의 team_id가 IN 쿼리의 파라미터로 바인딩되고 그에 해당하는 user 인스턴스들이 영속성 컨텍스트에 저장되는 것 까지는 알겠습니다. 그 이후에 이 user 인스턴스들이 어떻게 team의 users 컬렉션에 매핑되는 것인지가 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 회원가입 실행 오류가 있어서 확인해 본결과 Member.java 수정 @GeneratedValue(strategy = GenerationType.SEQUENCE) 을 하면 돌아가는데 왜 강의 코드 에서는 에러가 생기나요 ??
========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] IDE 에서 정상적으로 작동하는데 git bash에서 빌드할때 버전오류가 납니다 자바 22 사용하고 있습니다.
안녕하세요 <기본 키 매핑> 강좌를 듣던 중 h2 데이터베이스에 Member table이 갑자기 사라지는 오류가 있어서 질문드립니다..ㅜㅜ 다음과 같은 오류 메시지가 떠서, test.mv .db를 삭제하고 다시 생성한 뒤 실행하였는데도 똑같습니다..ㅜㅜ h2 database에 Member table 없는 현상 뭐가 문제일까요..??ㅜㅜ 감사합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 따로 jsp 프로젝트를 하고 있는데, jsp에서는 에러를 jsp에서 어떻게 받는지 궁금합니다. public String login(@ModelAttribute("user") Member member, BindingResult bindingResult) { Member loginMember = loginService.login(member.getUserId(), member.getPassword()); if (loginMember == null) { bindingResult.reject("loginFail", "아이디 또는 비밀번호가 맞지 않습니다."); return "login/loginForm"; } return "redirect:/"; } <div class="container"> <div class="login-container"> <h2 class="text-center mb-4">로그인</h2> 에러 메시지 띄우고 싶은 곳 <form action="/login" method="post" modelAttribute="user"> <div class="mb-3"> <label for="userId" class="form-label">아이디</label> <input type="text" class="form-control" id="userId" name="userId" required> </div> <div class="mb-3"> <label for="password" class="form-label">비밀번호</label> <input type="password" class="form-control" id="password" name="password" required> </div> <div class="d-grid gap-2"> <button type="submit" class="btn btn-primary">로그인</button> </div> </form> </div> </div>
안녕하세요 datajpa로 개발을 하다보니 궁금한 점이 생겼습니다. 어떤 엔티티에서 특정 조건을 만족하는 엔티티만 찾아야 할 때 jpql의 @Query어노테이션이나, queryDsl의 쿼리를 이용해서 where절 조건을 정의하고 찾을 수 있습니다. 하지만 꼭 그렇지 않고 findAll 후에 Stream.filter로 찾아도 되긴 합니다. 얼핏 보면 findAll() 이 훨씬 비싸 보이지만 "DB비용이 매우 비싸기 때문에 , 오히려 was에서 추가작업(정렬) 등을 하는게 좋을 때가 있다." 라는 걸 본적이 있어서 질문 드립니다. jpa를 쓰는게 확실히 여러가지 면에선 편리한 점이 많지만, 결국 비지니스 로직과 관련된 특정한 조건들을 찾기 위해서라면 쿼리가 세분화 되어 나가야 되는데 그런 상황에서 jpa는 어떤 장점을 가지는지는 잘 모르겠습니다. 읽어주셔서 감사합니다!
메서드 영역은 클래스 정보 static 영역 런타임 상수 풀 이렇게 세가지로 구성되어 있는걸로 알고 있습니다. static 메서드와 그냥 메서드 둘다 클래스 정보에 저장되는게 맞지만, 둘의 차이는 참조값(인스턴스) 없이 호출 가능하느냐, 아니냐의 차이가 맞을까요? 만약 아니고 static 메서드는 static 영역에 저장된다고 한다면, static 영역에 있기 때문에 static 메서드는 참조값 없이 호출 가능한것 인가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 메서드 영역은 클래스 정보 static 영역 런타임 상수 풀 이렇게 세가지로 구성되어 있는걸로 알고 있습니다. static 중첩 클래스, static이 없는 내부 클래스는 메모리 구조상 어디에 저장 되나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요 Spring 강의 열심히 듣고 있습니다. paging 관련해서 듣다가 문득 궁금한 것이 생겨서 질문드립니다. 현재까지 배운 Spring data jpa에서는 매번 paging을 요청할 때마다 count 쿼리도 같이 날라가는데요, JPA를 떠나 일반적인 실무 환경에서도 매번 paging 쿼리와 count 쿼리를 같이 날리는지가 궁금합니다. paging 쿼리를 매번 날리면 새로운 게시물이 등록된 경우에 해당 게시물도 paging에 넣어서 계산할 수 있다는 장점은 있는 것 같은데 paging가 바뀔 때마다 count 연산이 수행된다는 것이 큰 오버헤드가 발생할 수도 있다는 생각이 들기도합니다.. 관련해서 어떻게 구현하는 것이 best pratice에 가까울까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] java.lang.IllegalStateException: Could not initialize plugin: interface org.mockito.plugins.MockMaker (alternate: null) at org.mockito.internal.configuration.plugins.PluginLoader$1.invoke(PluginLoader.java:85) at jdk.proxy2/jdk.proxy2.$Proxy72.getHandler(Unknown Source) at org.mockito.internal.util.MockUtil.getMockHandlerOrNull(MockUtil.java:158) at org.mockito.internal.util.MockUtil.isMock(MockUtil.java:147) at org.mockito.internal.util.DefaultMockingDetails.isMock(DefaultMockingDetails.java:32) at org.springframework.boot.test.mock.mockito.MockReset.get(MockReset.java:106) at org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener.resetMocks(ResetMocksTestExecutionListener.java:85) at org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener.resetMocks(ResetMocksTestExecutionListener.java:73) at org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener.beforeTestMethod(ResetMocksTestExecutionListener.java:60) at org.springframework.test.context.TestContextManager.beforeTestMethod(TestContextManager.java:320) at org.springframework.test.context.junit.jupiter.SpringExtension.beforeEach(SpringExtension.java:240) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) Suppressed: java.lang.IllegalStateException: Could not initialize plugin: interface org.mockito.plugins.MockMaker (alternate: null) at org.mockito.internal.configuration.plugins.PluginLoader$1.invoke(PluginLoader.java:85) at jdk.proxy2/jdk.proxy2.$Proxy72.getHandler(Unknown Source) at org.mockito.internal.util.MockUtil.getMockHandlerOrNull(MockUtil.java:158) at org.mockito.internal.util.MockUtil.isMock(MockUtil.java:147) at org.mockito.internal.util.DefaultMockingDetails.isMock(DefaultMockingDetails.java:32) at org.springframework.boot.test.mock.mockito.MockReset.get(MockReset.java:106) at org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener.resetMocks(ResetMocksTestExecutionListener.java:85) at org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener.resetMocks(ResetMocksTestExecutionListener.java:73) at org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener.afterTestMethod(ResetMocksTestExecutionListener.java:67) at org.springframework.test.context.TestContextManager.afterTestMethod(TestContextManager.java:487) at org.springframework.test.context.junit.jupiter.SpringExtension.afterEach(SpringExtension.java:278) ... 2 more Caused by: java.lang.IllegalStateException: Internal problem occurred, please report it. Mockito is unable to load the default implementation of class that is a part of Mockito distribution. Failed to load interface org.mockito.plugins.MockMaker at org.mockito.internal.configuration.plugins.DefaultMockitoPlugins.create(DefaultMockitoPlugins.java:105) at org.mockito.internal.configuration.plugins.DefaultMockitoPlugins.getDefaultPlugin(DefaultMockitoPlugins.java:79) at org.mockito.internal.configuration.plugins.PluginLoader.loadPlugin(PluginLoader.java:75) at org.mockito.internal.configuration.plugins.PluginLoader.loadPlugin(PluginLoader.java:49) at org.mockito.internal.configuration.plugins.PluginRegistry.<init>(PluginRegistry.java:29) at org.mockito.internal.configuration.plugins.Plugins.<clinit>(Plugins.java:26) at org.mockito.internal.MockitoCore.<clinit>(MockitoCore.java:71) at org.mockito.Mockito.<clinit>(Mockito.java:1683) at org.springframework.boot.test.mock.mockito.MockReset.get(MockReset.java:105) at org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener.resetMocks(ResetMocksTestExecutionListener.java:85) at org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener.resetMocks(ResetMocksTestExecutionListener.java:73) at org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener.beforeTestMethod(ResetMocksTestExecutionListener.java:60) at org.springframework.test.context.TestContextManager.beforeTestMethod(TestContextManager.java:320) at org.springframework.test.context.junit.jupiter.SpringExtension.beforeEach(SpringExtension.java:240) ... 2 more Caused by: java.lang.reflect.InvocationTargetException at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) at org.mockito.internal.configuration.plugins.DefaultMockitoPlugins.create(DefaultMockitoPlugins.java:103) ... 15 more Caused by: org.mockito.exceptions.base.MockitoInitializationException: Could not initialize inline Byte Buddy mock maker. It appears as if your JDK does not supply a working agent attachment mechanism. Java : 17 JVM vendor name : Amazon.com Inc. JVM vendor version : 17.0.11+9-LTS JVM name : OpenJDK 64-Bit Server VM JVM version : 17.0.11+9-LTS JVM info : mixed mode, sharing OS name : Windows 11 OS version : 10.0 at org.mockito.internal.creation.bytebuddy.InlineDelegateByteBuddyMockMaker.<init>(InlineDelegateByteBuddyMockMaker.java:260) at org.mockito.internal.creation.bytebuddy.InlineByteBuddyMockMaker.<init>(InlineByteBuddyMockMaker.java:23) ... 18 more Caused by: java.lang.IllegalArgumentException at java.instrument/sun.instrument.InstrumentationImpl.appendToClassLoaderSearch0(Native Method) at java.instrument/sun.instrument.InstrumentationImpl.appendToBootstrapClassLoaderSearch(InstrumentationImpl.java:220) at org.mockito.internal.creation.bytebuddy.InlineDelegateByteBuddyMockMaker.<clinit>(InlineDelegateByteBuddyMockMaker.java:177) ... 19 more Caused by: [CIRCULAR REFERENCE: java.lang.IllegalStateException: Internal problem occurred, please report it. Mockito is unable to load the default implementation of class that is a part of Mockito distribution. Failed to load interface org.mockito.plugins.MockMaker]
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하세요. 수업에 배운 내용을 바탕으로 작은 메모 어플을 만들면서 질문이 있어 질문 남깁니다. @Repository public class JdbcMemoRepository implements MemoRepository{ private final JdbcTemplate template; public JdbcMemoRepository(DataSource dataSource) { this.template = new JdbcTemplate(dataSource); } @Override public Memo memoSave(Memo memo) { String sql = "insert into memo (memo, created, dTime) values (?, ?, ?)"; template.update(sql, memo.getMemo(), LocalDateTime.now(), memo.getDTime()); return memo; } 이런식으로 코드를 짜서 memoSave의 반환값을 확인해 보면 반환값이 memo와 dTime 필드에만 있고, created와 id는 null값으로 반환이 됩니다. 이유는 클라이언트쪽에서 requestBody로 건내주는 필드가 memo와 dTime뿐이고, created는 서버에서 LocalDateTime.now ()로, id는 mysql에서 auto increment로 생성하고 있어서 parameter로 받는 memo를 그대로 반환하면 id와 created가 null이 되는 것 같습니다. 이 문제를 해결 하기 위해서는 memoSave로 데이터베이스에 넣어준 후 바로 그 레코드 값을 데이터베이스에서 꺼내서 반환을 해야 할 것 같은데 방법을 모르겠어서 질문드립니다.
쿠키를 이용한 방법, 직접만든 세션을 이용하는 방법, 서블릿 세션을 이용하는 방법 모두에서 사용자별로 고유의 세선id를 생성하였지만 그 생성된 값들을 찾기 위한 키는 상수로 정의하여 사용하셨습니다. // 쿠키만 이용하였을 떄 Cookie idCookie = new Cookie(“memberId”, loginMember.getId()+””); // 직접 만든 세션 Cookie MySessionCookie = new Cookie(SESSION_COOKIE_NAME, sessionId); // 서블릿 세션 Session.setAttribute(SessionConst.LOGIN_MEMBER, loginMember) 이렇게 하면 서버측에서는 같은 키로 서로 다른 값들을 저장하게 되는것 같은데 어떻게 구별해서 사용자 객체를 찾아내는 건가요? 다른분들도 질문을 많이 하신것 같은데 찾아보아도 이해가 좀 어려워서 질문 드립니다. 그리고 홈컨트롤러에서 homeLogin의 모든 버전에서 쿠키, 세션을 이용해 찾았는데 회원데이터가 없으면 return “home”;을 하는데 회원이 로그인을 하여야 쿠키, 세션을 만들어주기 때문에 값이 존재하지 않을 수 없을것 같은데 해당 사항을 고려하신 이유가 있는건가요? 쿠키, 세션을 이용해 값을 찾는순간부터
JSESSIONID 쿠키가 로그아웃 이후에도 브라우저 남아잇던데 맞나요? 직접 세션 만들기 파트였나 쿠키 파트였나, 여기서는 setMaxAge(0) 이런거로 바로 만료시켰던 것 같아서요. 어차피 이 JSESSIONID 세션은 서버에서 없앴으니까 쿠키는 브라우저에 남아있어도 의미가 없는 거죠?