프로그래밍

프로그래밍

Facade 객체를 활용해 트랜잭션에서 외부 API 통신 분리하기

페스타고 팀에서는 Facade 객체를 활용해 트랜잭션에서 외부 API 통신을 분리했다. 문제 상황 Oauth2 기반 로그인 메서드에서, Oauth2 API 통신이 트랜잭션 범위 안에 속해있었다. 외부 API 통신은 비교적 시간이 오래 걸리는 메서드로, 이가 트랜잭션 범위 안에 포함되면 DB 커넥션을 가지고 있는 시간과 트랜잭션이 활성화된 시간이 불필요하게 길어진다. 이는 성능 저하와 직결되는 문제이다. 따라서 외부 API 통신 코드를 트랜잭션 범위에서 분리하는 것이 바람직하다. Facade 패턴 적용 우리 팀은 파사드 패턴(Facade Pattern)을 적용하여 해당 문제를 해결하였다. 파사드 패턴이란, 서브 시스템을 감추는 상위 수준의 인터페이스를 제공함으로써 시스템의 복잡도를 낮추는 디자인 패턴이다...

프로그래밍

[Java] I/O Stream

톰캣 미션을 수행하며, Java에서 Socket을 사용할 때 InputStream / OutputStream을 활용해 데이터를 주고받는다는 사실을 알게되었다. 이번 포스팅에서는 Java I/O Stream의 개념에 대해 알아보고자한다. Stream Stream은 데이터가 이동하는 통로이다. 데이터는 FIFO형태로 전송된다. Stream의 가장 큰 특징은 단방향으로만 흘러간다는 점인데, 하나의 스트림으로 입출력을 같이 처리할 수 없어 입출력을 위해서는 두 개의 스트림(InputStream/OutputStream)이 필요하다. InputStream은 외부에서 데이터를 읽는(입력) 역할을 수행하며, OuputStream은 외부로 데이터를 출력하는 역할을 수행한다. Stream은 처리하는 데이터의 유형에 따라 ..

프로그래밍

[Spring] @Async와 스레드풀

들어가며 페스타고 서비스에서는 특정 학교의 재학생임을 인증하기 위해, 학교 웹메일 인증 방식을 채택하였다. 사용자가 자신의 학교웹메일 주소를 작성하고 ‘인증 메일 전송’ 버튼을 클릭하면, 클라이언트에서 서버에게 인증 메일 전송 API 요청을 보낸다. 그러면 서버에서는 학생 인증을 위한 각종 조건을 검증한 후, 랜덤한 인증코드 생성 후 이를 담은 메일을 보낸다. 메일을 전송하는 과정은 평균 3.5초정도 소요되었다. 사용자가 응답을 위해 3.5초를 기다리기 보다는, 검증을 마치고 응답을 보낸 후 이메일 전송은 비동기로 진행하는 것이 더 나은 사용자 경험이라 판단했다. (만약 메일 전송 과정에서 실패해 메일이 수신되지 않으면 사용자는 메일 재전송 버튼을 누를 것 이다.) 이메일 전송을 비동기로 처리하기 위해 ..

프로그래밍

[Spring] Oauth2 소셜 로그인 확장에 유리하게 개선하기 (Kakao, Google, Naver)

프로젝트를 진행하며 SpringSecurity없이 Oauth2 소셜 로그인을 구현했다. 기존의 코드를 확장에 유리한 구조로 리팩토링한 과정을 설명하고자 한다. Oauth2의 동작 흐름에 대해서는 아래 포스팅을 참고하자. OAuth2.0 란? 오늘 백엔드 크루 홍실의 OAuth2.0 테코톡이 진행되었다. 해당 테코톡을 바탕으로 OAuth에 대해 정리해보고자 한다. 인증과 인가 인증과 인가는 OAuth을 이해하기 위해 필수적인 개념이다. 인증(Authent xxeol.tistory.com 프론트엔드 코드(Thymeleaf)부터 백엔드 코드까지 모두 구현해보았다. 아래는 내가 구현한 코드의 전체 흐름도이다. 🧨 기존 코드의 문제점 - 코드의 중복 기존 코드의 소스코드는 이 곳을 참고하면 된다. 기존 코드는 소..

도둑탈을 쓴 애쉬
'프로그래밍' 카테고리의 글 목록 (3 Page)