전체 글

프로그래밍

[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)부터 백엔드 코드까지 모두 구현해보았다. 아래는 내가 구현한 코드의 전체 흐름도이다. 🧨 기존 코드의 문제점 - 코드의 중복 기존 코드의 소스코드는 이 곳을 참고하면 된다. 기존 코드는 소..

프로그래밍

[Docker / MySQL] Docker로 띄운 mySQL 컨테이너에 employee sample DB 적재하기

MySQL에서 락, 인덱스 등을 공부하며 샘플 데이터가 필요한 일이 많아졌다. MySQL에서는 샘플 db를 제공한다. MySQL :: Employees Sample Database Employees Sample Database For legal information, see the Legal Notices. For help with using MySQL, please visit the MySQL Forums, where you can discuss your issues with other MySQL users. Document generated on: 2023-08-02 (revision: 76394) dev.mysql.com Docker로 MySQL 컨테이너를 띄우고, employee 샘플 데이터를 적..

프로그래밍

Git-flow란?

페스타고의 깃 브랜치 전략을 정하는 과정에서 git-flow에 대해 알게됐다. git-flow가 무엇인지 알아보자. 아래의 이미지는 git-flow의 흐름을 담은 가장 유명한 그림이다. 나도 아래 그림을 보고 git-flow에 대해 처음 알게되었다. git-flow에서 브랜치의 종류는 크게 main(master) / hotfix / release / develop / feature 인데, 위 이미지를 보면 상당히 복잡해서 이해하기 어렵다. 조금 더 간략하게 그려봤지만, 여전히 그림만으로는 git-flow를 이해하기는 어렵다. git-flow를 이해하기 위해, 브랜치의 종류별 역할을 알아보도록 하자. main & develop git-flow에서 핵심이 되는 두 브랜치이다. 이 브랜치들은 한 번 생성되면 ..

우테코 5기/레벨3

페스타고 팀이 QR코드 식별자로 JWT를 고려하는 이유

‘페스타고’ 서비스에서는 사용자가 ‘티켓 제시’ 버튼 클릭시, 30초간 유효한 QR코드 창이 활성화된다. 그리고, 우리 팀은 QR코드의 데이터로 JWT을 고려하고 있다. JWT에 대한 설명은 아래 포스팅을 참고하자. JWT란? '페스타고' 프로젝트를 진행하며 JWT를 활용할 일이 생겼다. JWT의 구성요소에 대해 알아보자. JWT 구성요소 JWT의 구성요소 3가지는 .으로 구분된다. Header Payload Signature 각 구성요소별 특징을 알아 xxeol.tistory.com 🌧️ UUID를 사용했을 때의 문제점 JWT 이전에는 QR코드 식별자로 JWT대신 UUID를 고려했다. UUID는 랜덤하게 생성된 코드로, 그 자체로 데이터를 담지 못한다. 즉, 해당 코드가 어떤 티켓의 코드인지 정보와 코..

프로그래밍

JWT란?

'페스타고' 프로젝트를 진행하며 JWT를 활용할 일이 생겼다. JWT란? JSON Web Token)는 JSON 형식의 데이터를 담은 토큰이다. JWT는 주로 웹 어플리케이션에서 사용자의 인증 및 인가를 처리할 때 사용된다. JWT의 구성요소에 대해 알아보자. JWT 구성요소 JWT는 크게 아래 세 가지 요소로 구성된다. Header Payload Signature 각 구성요소들은 .으로 구분된다. xxxxxx.yyyyyy.zzzzzz 각 구성요소별 특징을 알아보도록 하자. Header 헤더는 토큰의 유형, 암호화 알고리즘과 같은 토큰의 메타데이터를 포함한다. 헤더는 base64로 인코딩되어 있다. { "alg": "HS246", "typ": "JWT" } alg (암호화 알고리즘) JWT 토큰의 시그니..

프로그래밍

OAuth2.0 란?

오늘 백엔드 크루 홍실의 OAuth2.0 테코톡이 진행되었다. 해당 테코톡을 바탕으로 OAuth에 대해 정리해보고자 한다. 인증과 인가 인증과 인가는 OAuth을 이해하기 위해 필수적인 개념이다. 인증(Authentication) 당신은 누구십니까? 사용자의 신원을 확인하는 절차이다. 신원 확인을 위해 일반적으로 아이디와 비밀번호 등을 사용한다. 인가(Authorization) 당신은 이 작업을 수행할 권한이 있습니까? 인증된 사용자에 대한 접근 권한을 부여하는 과정이다. 이는 사용자가 특정 리소스에 대해 접근하거나 특정 작업을 수행할 수 있는 권한을 부여하는 것을 포함한다. OAuth의 등장배경 사용자의 구글 캘린더 기반으로 일정을 관리해주는 서비스가 있다고 하자. OAuth가 없다면, 해당 서비스는 ..

프로그래밍/인프라

Nginx란?

장바구니 웹 협업 미션에서 배포시 Nginx를 활용했는데, Nginx란 무엇인지 알아보도록 하자. 참고로, Nginx를 이해하기 위해서는 웹서버와 WAS, 그리고 Reverse Proxy 개념에 대해서 숙지하고 있어야한다. 해당 개념들은 아래 포스팅에서 정리했으니 참고하도록 하자. 웹 서버와 WAS Web Server와 WAS(Web Application Server)에 대해 알아보도록 하자. 이들을 설명하기 앞서, 이 둘의 차이를 이해하기 위해 정적 페이지와 동적 페이지의 차이부터 알아보자. 📄 정적 페이지와 동적 페이지 xxeol.tistory.com [Proxy] Forward Proxy와 Reverse Proxy 지난 게시글에서, 웹 서버와 WAS에 대해 알아봤다. 웹 서버와 WAS Web Ser..

도둑탈을 쓴 애쉬
좋은 경험 훔쳐먹기