전체 글(204)
-
HJ CHAT SERVER EC2에 배포하기
DOCKER 환경에서 내 Server와 Kafka가 정상적으로 동작한다는것을 확인했으니 CI/CD를 구축하기 전에 EC2 서버에 배포를 먼저 진행해야한다. SSH 접속ssh -i "C:\Users\wnd2g\Desktop\AWS EC2 키페어\HJ-CHAT-BACKEND-SERVER-KEY-PAIR.pem" ubuntu@3.36.182.4 docker 설치sudo apt-get updatesudo apt-get install -y docker.iosudo systemctl start dockersudo systemctl enable docker docker-compose 설치sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2..
2025.01.25 -
𝙒𝙚𝙗𝙎𝙤𝙘𝙠𝙚𝙩 통신에서 𝘼𝙘𝙘𝙚𝙨𝙨𝙏𝙤𝙠𝙚𝙣 재발급 받기 (연결 중에)
웹소켓에 연결할때 토큰을 검증하고 토큰이 만료되었다면 웹소켓을 연결을 끊고 토큰을 재발급 받은다음 다시 웹소켓에 연결하는 로직은 구현이 되었다.하지만 이미 웹소켓에 연결이 된 상태에서는 accessToken의 만료기간이 끝났음에도 불구하고 메세지를 보낼수가 있는 상황이다. 토큰의 만료시간이 지난것을 볼수 있지만메세지는 여전히 보낼수 있는 상황이다. 이는 웹소켓을 연결하는 순간에는 토큰 검증이 이루어져 연결에 성공하지만 HTTP 통신과 다르게 지속적으로 연결이 되는 상황이기때문에 연결에 성공한 다음부터는 토큰이 만료가 되더라도 서버 입장에서는 알 수 없는것이다.물론 사용자가 메세지를 보낼때 토큰도 같이 보내게 하는 식으로도 구현이 가능하지만, 매세지를 보낼때마다 토큰을 검증하는 것은 속도 저하 문제가 ..
2025.01.24 -
𝐖𝐞𝐛𝐒𝐨𝐜𝐤𝐞𝐭 통신에서 𝐀𝐜𝐜𝐞𝐬𝐬𝐓𝐨𝐤𝐞𝐧 재발급 받기 (최초 실행시)
일반 페이지에서는 Filter를 통해서 해당 토큰을 검증하고 만약 유효기간이 끝났다면 HTTP ONLY 쿠키에 저장되어있는 RefreshToken을 이용하여 AccessToken을 재발급 받는 형태로 사용자 정보를 유지하고 있다.JwtAuthenticationFilter (HTTP 필터)더보기package hjp.hjchat.infra.security.jwtimport io.jsonwebtoken.ExpiredJwtExceptionimport jakarta.servlet.FilterChainimport jakarta.servlet.http.HttpServletRequestimport jakarta.servlet.http.HttpServletResponseimport org.springframework.h..
2025.01.23 -
𝑟𝑒𝑓𝑟𝑒𝑠ℎ𝑇𝑜𝑘𝑒𝑛을 통해 𝑎𝑐𝑐𝑒𝑠𝑠𝑇𝑜𝑘𝑒𝑛 재발급
이때까지 테스트를 할때는 accessToken의 만료기간이 1시간으로 설정되어있어서 정상적으로 잘 작동하는지 알고 있었으나 refreshToken을 도입하고 accessToken의 만료기간을 1분으로 짧게 설정하자 정상적으로 토큰이 재발급 되지 않는 상황을 발견하여 해당 코드를 수정하였다. 더보기package hjp.hjchat.infra.security.jwtimport io.jsonwebtoken.ExpiredJwtExceptionimport jakarta.servlet.FilterChainimport jakarta.servlet.http.HttpServletRequestimport jakarta.servlet.http.HttpServletResponseimport org.springframework..
2025.01.22 -
테스트환경에서 SSL/HTTPS 설정하기
Server현재 로그인을 할때 AccessToken은 헤더에 담아서 클라이언트에게 보내고 RefreshToken은 secure=ture 설정을 해주었기때문에 쿠키가 HTTPS 연결에서만 전달이 되는 상황이다.@PostMapping("/login")fun login(@RequestBody request: LoginRequest, response: HttpServletResponse): ResponseEntity> { val tokenResponse = oAuthService.login(request) // ACCESS TOKEN을 헤더에 담아서 반환 val headers = HttpHeaders() headers.add("Authorization", "Bearer ${tokenResp..
2025.01.15 -
Redis를 이용한 로그아웃
블랙리스트를 이용하여 서버에서 로그아웃 기능을 수행하도록 설계할 것이다. Redis DB 생성 의존성 추가더보기dependencies { implementation("org.springframework.boot:spring-boot-starter-data-redis")} Redis Config 설정더보기@Configurationclass RedisConfig { @Bean fun redisTemplate(connectionFactory: RedisConnectionFactory): RedisTemplate { val redisTemplate = RedisTemplate() redisTemplate.connectionFactory = connectionFactory..
2025.01.14