[Spring MVC] Spring μ„Έμ…˜ μ’…λ£Œ μ‹œ λ‘œκ·Έμ•„μ›ƒ μ‹œκ°„ μžλ™ κΈ°λ‘ν•˜λŠ” 방법: HttpSessionListener와 빈 μ£Όμž… 문제 ν•΄κ²° (Mybatis)

2025. 4. 23. 18:29Β· π™±πšŠπšŒπš”πšŽπš—πš/Spring
λͺ©μ°¨
  1. μ„œλ‘ 
  2. 문제 : getSession()이 null이라고? 
  3. ν•΄κ²° : HttpSessionListener 이용
  4. 문제 2: μ„œλΉ„μŠ€ 빈이 μ œλŒ€λ‘œ μ£Όμž…λ˜μ§€ μ•Šμ•„μ„œ μ—λŸ¬κ°€ λ°œμƒ @Autowired
  5. ν•΄κ²° : 직접 μ»¨ν…μŠ€νŠΈλ₯Ό μ°Έμ‘°ν•˜μ—¬ λΉˆμ„ μ–»μ–΄μ•Ό ν•œλ‹€.
λ°˜μ‘ν˜•

 

μ„œλ‘ 

 

둜그인 접속 기둝 κΈ°λŠ₯을 κ°œλ°œν•˜λ˜ μ€‘μ΄μ—ˆκ³ , λ‘œκ·Έμ•„μ›ƒ μ‹œκ°„λ„ 같이 기둝을 ν•΄μ•Ό ν–ˆλ‹€.
μ‚¬μš©μžκ°€ λ‘œκ·Έμ•„μ›ƒ λ²„νŠΌμ„ ν΄λ¦­ν–ˆμ„ λ•Œμ˜ λ‘œκ·Έμ•„μ›ƒ μ‹œκ°„ 기둝은 μ‰½κ²Œ μ²˜λ¦¬ν•  수 μžˆμ—ˆλ‹€.
ν•˜μ§€λ§Œ μ„Έμ…˜ 만료 μ‹œ μžλ™ λ‘œκ·Έμ•„μ›ƒ μ‹œκ°„μ„ κΈ°λ‘ν•˜κ³   λΈŒλΌμš°μ €λ₯Ό λ‹«μ•˜μ„ λ•Œμ—λ„ μžλ™ λ‘œκ·Έμ•„μ›ƒ μ‹œκ°„μ„  κΈ°λ‘ν•˜λŠ” 뢀뢄은 κ΅¬ν˜„ν•˜λŠ” 데 어렀움이 μžˆμ—ˆλ‹€.

 

 

κΈ°μ‘΄ μž‘μ„±λœ μ½”λ“œμ—μ„œλŠ” ν”„λ‘ νŠΈμ—μ„œ μ„Έμ…˜ μ‹œκ°„μ΄ 만료되면 /logout 컨트둀러 보내 λ‘œκ·Έμ•„μ›ƒ 처리λ₯Ό μ§„ν–‰ν•˜κ³  μžˆλ‹€.
κ·Έλž˜μ„œ 이 /logout μ»¨νŠΈλ‘€λŸ¬μ—μ„œ λ‘œκ·ΈμΈν–ˆλ˜ μ„Έμ…˜ 정보λ₯Ό 가져와 λ‘œκ·Έμ•„μ›ƒ μ‹œκ°„μ„ κΈ°λ‘ν•˜κ³ , μ„Έμ…˜μ„ μ‚­μ œν•˜λ©΄ λ˜κ² λ‹€κ³  생각을 ν–ˆλ‹€.

 

 

문제 : getSession()이 null이라고? 

 

ν•˜.μ§€.만.. λ¬Έμ œλŠ” μ„Έμ…˜ μ‹œκ°„μ΄ μ’…λ£Œλ˜λ©΄ μ„Έμ…˜ 정보가 μžλ™μœΌλ‘œ μ‚­μ œλ˜κΈ° λ•Œλ¬Έμ— /logout μ»¨νŠΈλ‘€λŸ¬μ—μ„œ getSession()을 ν˜ΈμΆœν•΄λ„ μ„Έμ…˜ 정보가 null둜 λ°˜ν™˜λλ‹€.

(HttpSessionListenerκ°€ μ„Έμ…˜μ˜ μ’…λ£Œλ₯Ό 감지함)

 

 

 

 

ν•΄κ²° : HttpSessionListener 이용

 

첫 번째 ν•΄κ²° : κ·Έλž˜μ„œ 이 HttpSessionListener둜 μ„Έμ…˜ μ’…λ£Œ μ‹œμ— λ‘œκ·Έμ•„μ›ƒ μ‹œκ°„μ„ κΈ°λ‘ν•˜λ©΄ λ˜κ² λ‹€κ³  μƒκ°ν–ˆλ‹€.

    <listener>
        <listener-class>example.com.listener.SessionTimeoutListener</listener-class>
    </listener>

web.xml에 listenerλ₯Ό 등둝해주고 ν•˜λ‚˜μ˜ 클래슀λ₯Ό λ§Œλ“€μ–΄ HttpSessionListenerλ₯Ό implementsν•΄ μ‚¬μš©ν•  수 μžˆλ‹€.

example.com.listenerλŠ” νŒ¨ν‚€μ§€ 이름이고, SessionTimeoutListenerλŠ” 클래슀 이름이닀.

 

 

package example.com.listener;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

public class SessionTimeoutListener implements HttpSessionListener {
    
    @Override
    public void sessionCreated(HttpSessionEvent se) {
        // μ„Έμ…˜ 생성 μ‹œ 둜직 ν•„μš”ν•˜λ©΄ 여기에 μΆ”κ°€
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        // μ„Έμ…˜ μ’…λ£Œ μ‹œ 둜직 ν•„μš”ν•˜λ©΄ 여기에 μΆ”κ°€
    }
}

 

httpSessionListener μΈν„°νŽ˜μ΄μŠ€λ₯Ό implementsν•˜μ—¬ λ‘œμ§μ„ μž¬μ •μ˜ν•  수 μžˆλ‹€.

sessionCreatedλŠ” μ„Έμ…˜ μƒμ„±μ‹œ μ‹€ν–‰λ˜λŠ” λ©”μ„œλ“œμ΄κ³ , sessionDestroyedλŠ” μ„Έμ…˜ μ’…λ£Œμ‹œ μ‹€ν–‰λ˜λŠ” λ©”μ„œλ“œμ΄λ‹€.

sessionDestroyed에 λ‘œκ·Έμ•„μ›ƒ μ‹œκ°„μ„ κΈ°λ‘ν•΄μ£ΌλŠ” μ„œλΉ„μŠ€λ₯Ό μž‘μ„±ν–ˆλ‹€. 

 

 

 

 

 

문제 2: μ„œλΉ„μŠ€ 빈이 μ œλŒ€λ‘œ μ£Όμž…λ˜μ§€ μ•Šμ•„μ„œ μ—λŸ¬κ°€ λ°œμƒ @Autowired

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

public class SessionTimeoutListener implements HttpSessionListener {

    @Autowired
    private LoginLogService loginLogService;  // @Autowired둜 μ£Όμž…λ°›μœΌλ € μ‹œλ„ν•˜λŠ” λΆ€λΆ„ (잘λͺ»λœ μ ‘κ·Ό)

    @Override
    public void sessionCreated(HttpSessionEvent se) {
        // μ„Έμ…˜ 생성 μ‹œ 둜직 ν•„μš”ν•˜λ©΄ 여기에
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        Object loginLogIdObj = se.getSession().getAttribute("loginLogId");
        if (loginLogIdObj != null) {
            Long loginLogId = Long.valueOf(loginLogIdObj.toString());
           
            // λ‘œκ·Έμ•„μ›ƒ μ‹œκ°„ 기둝
            loginLogService.updateLogoutTime(loginLogId);

            } else {
                System.out.println("Spring Contextλ₯Ό 찾을 수 μ—†μŒ");
            }

        } else {
            System.out.println("μ„Έμ…˜ 만료, loginLogId μ—†μŒ");
        }
    }
}

 

 

org.apache.catalina.session.StandardSession expire
SEVERE: μ„Έμ…˜ 이벀트 λ¦¬μŠ€λ„ˆκ°€ μ˜ˆμ™Έλ₯Ό λ°œμƒμ‹œμΌ°μŠ΅λ‹ˆλ‹€.
java.lang.NullPointerException
	at example.com.listener.SessionTimeoutListener.sessionDestroyed(SessionTimeoutListener.java:30)
	at org.apache.catalina.session.StandardSession.expire(StandardSession.java:768)
	at org.apache.catalina.session.StandardSession.isValid(StandardSession.java:628)
	at org.apache.catalina.connector.Request.doGetSession(Request.java:2941)
	at org.apache.catalina.connector.Request.getSessionInternal(Request.java:2677)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:451)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:670)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:346)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:928)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1786)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
	at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
	at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
	at java.base/java.lang.Thread.run(Thread.java:834)

 

μœ„ μ—λŸ¬λ₯Ό 보면 NullPointerException μ—λŸ¬κ°€ λ°œμƒν–ˆλ‹€.

loginLogServiceλ₯Ό λΆˆλŸ¬μ™€ μ‚¬μš©μ„ ν•˜λ €κ³  ν–ˆλŠ”λ° loginLogServiceκ°€ Nullμ΄λΌλŠ” 였λ₯˜μ΄λ‹€.

 

 

 

μ™œ?

@AutowiredλŠ” Spring μ»¨ν…μŠ€νŠΈμ— λ“±λ‘λœ λΉˆμ„ μ£Όμž…λ°›λŠ” 방식이닀. κ·ΈλŸ¬λ‚˜ HttpSessionListenerλŠ” Spring μ»¨ν…μŠ€νŠΈκ°€ μ™„μ „νžˆ μ΄ˆκΈ°ν™”λ˜κΈ° 전에 μ‹€ν–‰λœλ‹€.(λΉˆμ„ λ“±λ‘ν•˜κΈ° 전에 HttpSessionListenerκ°€ μ‹€ν–‰λ˜λŠ” 것)

이 λ•Œλ¬Έμ— @Autowiredλ₯Ό μ‚¬μš©ν•˜μ—¬ λΉˆμ„ μ£Όμž…λ°›μœΌλ €κ³  ν•˜λ©΄, Spring μ»¨ν…μŠ€νŠΈκ°€ 아직 μ€€λΉ„λ˜μ§€ μ•Šμ•˜κΈ° λ•Œλ¬Έμ— ν•΄λ‹Ή λΉˆμ„ 찾을 수 μ—†λ‹€.(당연함. 등둝이 μ•ˆ λμœΌλ‹ˆ λͺ»μ°Ύμ„ 수 밖에)

 

κ°„λ‹¨νžˆ λ§ν•˜μžλ©΄:

  • λ¦¬μŠ€λ„ˆλŠ” Spring μ»¨ν…μŠ€νŠΈκ°€ μ΄ˆκΈ°ν™”λ˜κΈ° 전에 싀행됨.
  • λ”°λΌμ„œ Spring μ»¨ν…μŠ€νŠΈ μ΄ˆκΈ°ν™” 전에 @Autowired둜 λΉˆμ„ μ£Όμž…λ°›μ„ 수 μ—†μŒ

κ³Ό κ°™λ‹€. 

 

 

 

 

ν•΄κ²° : 직접 μ»¨ν…μŠ€νŠΈλ₯Ό μ°Έμ‘°ν•˜μ—¬ λΉˆμ„ μ–»μ–΄μ•Ό ν•œλ‹€.

WebApplicationContextUtils.getWebApplicationContext(servletContext)

 

 

 

 

1. context-common.xml에 base-package와 bean을 등둝해쀀닀.

<context:component-scan base-package="example.com.loginlog" />

<!-- mapper μΈμ‹ν•˜λ„λ‘ 등둝 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
	<property name="basePackage" value="example.com.mapper"/>
</bean>

 

 

 

2. 직접 ν˜ΈμΆœν•˜λŠ” μ„œλΉ„μŠ€λ₯Ό μž‘μ„±ν•œλ‹€.

// Spring의 ServletContextλ₯Ό 톡해 ν˜„μž¬ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ „μ—­ 정보λ₯Ό κ°€μ Έμ˜¨λ‹€.
ServletContext servletContext = se.getSession().getServletContext();

// WebApplicationContextUtilsλ₯Ό μ‚¬μš©ν•΄ Spring의 ApplicationContext (즉, BeanFactory) λ₯Ό κ°€μ Έμ˜¨λ‹€.
// 이 μ»¨ν…μŠ€νŠΈμ—μ„œ μš°λ¦¬κ°€ ν•„μš”ν•œ μ„œλΉ„μŠ€ Bean을 μˆ˜λ™μœΌλ‘œ μ–»μ–΄μ˜¬ 수 μžˆλ‹€.
WebApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(servletContext);

if (context != null) {
    LoginLogService loginLogService = (LoginLogService) context.getBean("loginLogService");

    // λ‘œκ·Έμ•„μ›ƒ μ‹œκ°„ 기둝
    loginLogService.updateLogoutTime(loginLogId);
} else {
    System.out.println("Spring Contextλ₯Ό 찾을 수 μ—†μŒ");
}

 

μ΄λ ‡κ²Œ μž‘μ„±ν–ˆλ”λ‹ˆ μ„Έμ…˜ λ§Œλ£Œμ‹œμ—, λΈŒλΌμš°μ €λ₯Ό μ’…λ£Œν–ˆμ„ λ•Œμ—λ„ μžλ™μœΌλ‘œ λ‘œκ·Έμ•„μ›ƒ 기둝 μ„œλΉ„μŠ€κ°€ μ‹€ν–‰λ˜μ–΄ 기둝이 μ œλŒ€λ‘œ λ˜μ—ˆλ‹€.

 

ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•΄ 둜그인 μ„Έμ…˜μ„ μ•½ 2λΆ„μ •λ„λ‘œ 두고 ν…ŒμŠ€νŠΈλ₯Ό μ§„ν–‰ν–ˆλ‹€!.

 

 


 

였늘의 문제 정리 

 

1. μ„Έμ…˜ 생성, 만료 κ°μ§€λŠ” HttpSessionListener둜 μ²˜λ¦¬ν•œλ‹€.

β†’ μ„Έμ…˜μ΄ 생성될 λ•Œμ™€ μ†Œλ©Έλ  λ•Œλ₯Ό μ˜€λ²„λΌμ΄λ“œν•˜μ—¬ μ›ν•˜λŠ” λ‘œμ§μ„ μž‘μ„±ν•  수 μžˆλ‹€.

 

2. ν•˜μ§€λ§Œ HttpSessionListenerλŠ” Spring Bean이 μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— @Autowired λ“±μœΌλ‘œ Bean μ£Όμž…μ΄ λΆˆκ°€λŠ₯ν•˜λ‹€.

β†’  Spring Contextκ°€ μ΄ˆκΈ°ν™”λ˜κΈ° 전에 λ¨Όμ € λ“±λ‘λ˜κΈ° λ•Œλ¬Έ.

 

3. λ”°λΌμ„œ 직접 Spring Contextμ—μ„œ ν•„μš”ν•œ Bean을 κΊΌλ‚΄μ„œ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

β†’ WebApplicationContextUtils.getWebApplicationContext(servletContext)λ₯Ό μ‚¬μš©ν•΄ Bean μˆ˜λ™ νšλ“.

 

4. μ΄λ ‡κ²Œ 직접 Bean을 κΊΌλ‚΄μ„œ μ‚¬μš©ν•˜λ €λ©΄ context-common.xml에 ν•΄λ‹Ή νŒ¨ν‚€μ§€ 등둝 및 Mapper 섀정이 ν•„μˆ˜μ΄λ‹€.

 

 

λ°˜μ‘ν˜•

'π™±πšŠπšŒπš”πšŽπš—πš > Spring' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[Spring] μ „μžμ •λΆ€ ν”„λ ˆμž„μ›Œν¬ μ„Έμ…˜ μ‹œκ°„ λ³€κ²½ν•˜κΈ°  (1) 2025.04.25
  1. μ„œλ‘ 
  2. 문제 : getSession()이 null이라고? 
  3. ν•΄κ²° : HttpSessionListener 이용
  4. 문제 2: μ„œλΉ„μŠ€ 빈이 μ œλŒ€λ‘œ μ£Όμž…λ˜μ§€ μ•Šμ•„μ„œ μ—λŸ¬κ°€ λ°œμƒ @Autowired
  5. ν•΄κ²° : 직접 μ»¨ν…μŠ€νŠΈλ₯Ό μ°Έμ‘°ν•˜μ—¬ λΉˆμ„ μ–»μ–΄μ•Ό ν•œλ‹€.
'π™±πšŠπšŒπš”πšŽπš—πš/Spring' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [Spring] μ „μžμ •λΆ€ ν”„λ ˆμž„μ›Œν¬ μ„Έμ…˜ μ‹œκ°„ λ³€κ²½ν•˜κΈ°
ν•΄λ²„λ‹ˆ
ν•΄λ²„λ‹ˆ
κ°œλ°œν•˜λ©΄μ„œ 배운 것듀을 κΈ°λ‘ν•©λ‹ˆλ‹€.
ν•΄λ²„λ‹ˆ
DevNight
ν•΄λ²„λ‹ˆ
전체
였늘
μ–΄μ œ
  • 전체보기 (194)
    • πšπšŽπšπš›πš˜πšœπš™πšŽπšŒπšπš’πšŸπšŽπšœ (5)
      • πšƒπš’πš™πšœ (2)
      • 회고 (3)
      • μ‹€μˆ˜ λͺ¨μŒμ§‘ (0)
    • π™Ώπš›πš˜πš“πšŽπšŒπš (3)
      • π™Ίπ™Ύπš‚πšƒπ™° πš†πšŽπš‹ π™Ώπš›πš˜πš“πšŽπšŒπš (2)
    • π™Ώπš›πš˜πšπš›πšŠπš–πš–πš’πš—πš π™»πšŠπš—πšπšžπšŠπšπšŽ (16)
      • π™·πšƒπ™Όπ™» (6)
      • π™²πš‚πš‚ (1)
      • π™Ήπ™°πš…π™° (1)
      • π™ΉπšŠπšŸπšŠπš‚πšŒπš›πš’πš™πš (7)
      • πšƒπš’πš™πšŽπš‚πšŒπš›πš’πš™πš (1)
    • π™±πšŠπšŒπš”πšŽπš—πš (4)
      • πš‚πš™πš›πš’πš—πš π™±πš˜πš˜πš (0)
      • Spring (2)
      • 파일 처리 (1)
      • π™Ήπš‚π™Ώ (1)
    • π™΅πš›πš˜πš—πšπšŽπš—πš (5)
      • 𝚁𝚎𝚊𝚌𝚝 (3)
      • πš…πšžπšŽ.πš“πšœ (2)
    • π™°πš•πšπš˜πš›πš’πšπš‘πš– (32)
      • π™Ώπš›πš˜πšπš›πšŠπš–πš–πšŽπš›πšœ (6)
      • π™±πšŠπšŽπš”πš“πš˜πš˜πš— (24)
    • π™³π™°πšƒπ™°π™±π™°πš‚π™΄ (16)
      • πš‚πš€π™» (1)
      • π™Ώπš˜πšœπšπšπš›πšŽπš‚πš€π™» (1)
      • π™Όπš’πš‚πš€π™» (3)
      • π™Ύπš›πšŠπšŒπš•πšŽ (0)
      • π™Ώπš›πš˜πšπš›πšŠπš–πš–πšŽπš›πšœ (1)
    • π™³πšŽπšŸπšŽπš•πš˜πš™πš–πšŽπš—πš πšƒπš˜πš˜πš•πšœ (4)
      • π™Έπš—πšπšŽπš•πš•πš’π™Ή (0)
      • π™΄πšŒπš•πš’πš™πšœπšŽ (1)
      • πš…πš‚π™²πš˜πšπšŽ (0)
      • π™±πšžπš’πš•πš πš‚πšŒπš›πš’πš™πšπšœ (1)
    • πš…πšŽπš›πšœπš’πš˜πš— π™²πš˜πš—πšπš›πš˜πš• (0)
      • π™Άπš’πš (0)
      • π™Άπš’πšπ™·πšžπš‹ (0)
      • πš‚πš…π™½ (0)
    • 배포 및 인프라 (2)
      • π™°πš†πš‚ (2)
    • π™Έπšƒ (15)
      • πš‚πš…π™½ (3)
    • π™ΉπšŠπšŸπšœπš‚πšŒπš›πš’πš™πš (4)
      • πš…πšžπšŽ.πš“πšœ (0)
    • πš†πšŽπš‹ (9)
      • 𝚊𝚠𝚜 (0)
      • π™·πšƒπ™Όπ™» (0)
      • π™²πš‚πš‚ (2)
    • π™ΉπšŠπšŸπšŠ (56)
      • πš‚πš™πš›πš’πš—πš π™±πš˜πš˜πš (3)
    • π™Άπš’πšπ™·πšžπš‹ (10)
    • ν™˜κ²½μ„€μ • (10)

λΈ”λ‘œκ·Έ 메뉴

  • ν™ˆ
  • νƒœκ·Έ
  • λ°©λͺ…둝

곡지사항

인기 κΈ€

νƒœκ·Έ

  • php
  • λ°°μ—΄
  • λ°±μ€€
  • Java
  • ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€
  • web
  • μžλ°”μ˜μ •μ„
  • React
  • JavaScript
  • μ•Œκ³ λ¦¬μ¦˜
  • μ˜€λΈ”μ™„
  • html
  • μ½”λ”©ν…ŒμŠ€νŠΈ
  • μžλ°”μŠ€ν¬λ¦½νŠΈ
  • μžλ°”
  • PostgreSQL
  • database
  • 이클립슀
  • ν‹°μŠ€ν† λ¦¬μ±Œλ¦°μ§€
  • spring

졜근 λŒ“κΈ€

졜근 κΈ€

hELLO Β· Designed By μ •μƒμš°.v4.3.0
ν•΄λ²„λ‹ˆ
[Spring MVC] Spring μ„Έμ…˜ μ’…λ£Œ μ‹œ λ‘œκ·Έμ•„μ›ƒ μ‹œκ°„ μžλ™ κΈ°λ‘ν•˜λŠ” 방법: HttpSessionListener와 빈 μ£Όμž… 문제 ν•΄κ²° (Mybatis)
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”

단좕킀

λ‚΄ λΈ”λ‘œκ·Έ

λ‚΄ λΈ”λ‘œκ·Έ - κ΄€λ¦¬μž ν™ˆ μ „ν™˜
Q
Q
μƒˆ κΈ€ μ“°κΈ°
W
W

λΈ”λ‘œκ·Έ κ²Œμ‹œκΈ€

κΈ€ μˆ˜μ • (κΆŒν•œ μžˆλŠ” 경우)
E
E
λŒ“κΈ€ μ˜μ—­μœΌλ‘œ 이동
C
C

λͺ¨λ“  μ˜μ—­

이 νŽ˜μ΄μ§€μ˜ URL 볡사
S
S
맨 μœ„λ‘œ 이동
T
T
ν‹°μŠ€ν† λ¦¬ ν™ˆ 이동
H
H
단좕킀 μ•ˆλ‚΄
Shift + /
⇧ + /

* λ‹¨μΆ•ν‚€λŠ” ν•œκΈ€/영문 λŒ€μ†Œλ¬Έμžλ‘œ 이용 κ°€λŠ₯ν•˜λ©°, ν‹°μŠ€ν† λ¦¬ κΈ°λ³Έ λ„λ©”μΈμ—μ„œλ§Œ λ™μž‘ν•©λ‹ˆλ‹€.