본문 바로가기

Spring

(38)
Spring Security 동작 원리 프로젝트를 진행하면서 Spring Security를 활용해서 회원 로그인/로그아웃 처리 과정을 구현 했었다. 당시 시간이 촉박하다는 핑계로 상세하게 들여다보지 않고 로그인이 되는 상세 처리 과정만 이해하고 넘어갔었다. 로그인 과정 로그인 시도 -> username, password 정보를 HTTP body로 전달 인증 관리 -> UserDetailsService에게 username을 전달하고 회원 상세정보를 요청 회원 DB에서 회원 조회 -> 조회된 정보를 UserDetails로 변환 인증 관리자가 인증 처리 -> UserDetailsService가 전달해준 UserDetails의 정보와 클라이언트가 시도한 username,password 일치 여부 확인 UserDetails의 password는 암호문이..
나는 왜 JPA를 사용했을까? 항해를 진행하면서 아무렇지 않게 당연히? JPA를 사용했다. 왜 사용했는지는... 사실 처음 배웠던게 JPA다. 그러나 많은 ORM중에 나는 왜 굳이 JPA를 사용했는가?에 대해서 깊게 생각해보지 못했다. 이번 글을 작성하면서 ORM과 JPA에 대한 내용을 정리해보려고 한다. ORM(Object-Relational Mapping) 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것을 말한다. 객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용한다. 객체 모델과 관계형 모델 간에 불일치가 존재한다. ORM을 통해 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결한다. 데이터베이스 데이터 Object 필드 객체를 통해 간접적으로 데이터베이스 데이터..
채팅방 인원수 카운팅 오류(Redis) 항해 9주차 마무리 웹소켓/STOMP를 이용한 실시간 채팅을 구현하였고 채팅에서 실시간 참여 인원을 redis에 저장해보기로 하였다. 사용자가 구독을 하는 순간 정상적으로 인원수 카운팅이 되었지만, 사용자가 다른 페이지를 가거나 브라우저를 닫으면 연결이 끊기는데 연결이 끊기는 순간 인원수 카운팅이 정상적으로 되지 않았다. 여기서 시간을 많이 쏟아부었다... 단순히 disconnect되는 순간 유저 카운팅을 -1되는 로직으로 구현을 하였는데, 구독한 채널에서 유저 카운팅이 되는게 아닌 엉뚱한곳에서 -1이 되고 있었다. 우리팀은 Redis를 구현하는데 생각보다 시간이 오래걸렸고 반드시 이 문제를 해결하고 싶다는 의지에 불탔다. 계속해서 header값에 log를 찍어보았고 실마리?를 찾았다. 해당 채널을 구독..
예외 처리 항해 78일차 멘토링에서 조언해주신 대로 예외처리를 해봤다. 프로그램에서 예외는 발생할 수 밖에 없고 특히 예외로 인해 서버 프로그램이 작동을 멈출수도 있다는 피드백이 있었다. 예외가 발생하면 어떤 예외이고 이것이 무시해도 될 수준인지, 반드시 처리를 해야하는지, 시스템 자체를 종료시켜야 하는지에 대해 생각해봐야 한다. 시스템에서 물론 기능도 중요하지만 손쉬운 보완이라고 한다. 프로그램을 설계하고 구축하는 첫 단계에서 많은 예외상황에 대해 생각하고 고민해야한다. 에러와 예외의 차이 Error : 시스템 단계에서 발생하며 시스템의 비정상적인 상황이므로 예외처리가 아닌 시스템 환경을 개선해야 한다. Exeption : 프로그램 로직에서 발생하며 개발자가 작성한 로직에서 예외를 예상하여 구분하고 처리해야 한다..
Travis CI로 application.properties 암호화 항해 76일차 EC2, S3 관련 비밀 키를 포함하는 application.properties 파일을 깃허브에 그대로 올릴 수 없는 문제가 있어 처음에는 외부에 빼두고 외부파일을 읽는 방법으로 했지만 서버가 털리면 모든 정보를 잃을수도 있다는 조언으로 급하게 암호화 하는 방법을 찾아보았다. 여러 방법이 있었는데 Travis에서 파일을 암호화를 하여 깃허브에 올리고 travis에서 사용할 때는 파일을 복호화 해서 사용하게 만들 수 있다. Mac이 아닌 Window환경해서 하면 안된다는 팀원들이 많았다. Travis 설치 sudo gem install travis Travis 로그인 travis login --pro --github-token [본인 계정 토큰] 암호화 인텔리제이 터미널에서 암호화 하고자하는..
Nginx 무중단 배포 항해 75일차 Travis CI와 CodeDeploy로 CI/CD 구성을 하였다. 배포 자동화까지 되었으니 무중단 배포까지 진행했다. 긴 시간은 아니지만, 새로운 Jar가 실행되기 전까진 기존 Jar를 종료시켜 놓기 때문에 서비스가 종료된다. 서비스를 정지하지 않고 배포하는 것을 무중단 배포라고 한다. Nginx가 가지고 있는 여러 기능 중 리버스 프록시가 있다. 리버스 프록시란 Nginx가 외부의 요청을 받아 백엔드 서버로 요청을 전달하는 행위를 이야기 한다. 리버스 프록시 서버(엔진엑스)는 요청을 전달하고, 실제 요청에 대한 처리는 뒷단의 웹 애플리케이션들이 처리한다. 우리는 이 리버스 프록시를 통해 무중단 배포 환경을 구축해 볼 예정이며 Nginx를 이용한 무중단 배포를 하는 이유는 가장 저렴하고 ..
Travis CI와 AWS S3, CodeDeploy 연동 (3) 항해 74일차 Travis CI와 AWS S3, CodeDeploy 연동 앞에서 S3연동까지 되었다. AWS의 배포 시스템인 CodeDeploy를 이용하기 전에 배포 대상인 EC2가 CodeDeploy를 연동 받을 수 있게 설정해보자. EC2에 IAM 역할 추가 S3 버킷을 생성하면서 IAM에서 사용자 추가를 하였다. 이번에는 사용자 추가가 아닌 역할 추가를 해야한다. IAM의 사용자와 역할의 차이 역할 AWS 서비스에서만 할당할 수 있는 권한 EC2, CodeDeploy, SQS 등 사용자 AWS 서비스 외에 사용할 수 있는 권한 로컬 PC, IDC 서버 등 이번에 만들 권한은 EC2에서 사용해야 하기 때문에 사용자가 아닌 역할을 설정해준다. IAM에서 [역할]탭에서 역할 만들기 클릭 AWS서비스 / ..
Travis CI와 AWS S3 연동 (2) 항해 73일차 Travis CI와 AWS S3 연동 배포하기전에 Travis CI를 통해 빌드된 결과물을 보관할 수 있는 공간이 필요하다. AWS S3에 저장한다. S3 버킷 생성 파일들을 저장하고 접근 권한을 관리, 검색 등을 지원하는 파일 서버의 역할을 한다. 팀 프로젝트에서 S3를 사용하고 있는데 기존에는 게시글 작성 시 첨부되는 파일을 저장하는 용도로 사용하고 있다. 버킷 생성은 https://velog.io/@kyungwoon/TIL-%ED%95%AD%ED%95%B499-Day-50 참고하면 된다.(1번,2번,4번 과정 참고) 단, 2번 과정에서 모든 퍼블릭 액세스 차단에 체크해준다. 현재 프로젝트야 이미 깃허브에 오픈소스로 풀려있으니 문제없지만, 실제 서비스에서 할 때는 Jar 파일이 퍼블릭일..
Travis CI 연동 (1) CI/CD관련하여 Travis로 구현해보려고 한다. Travis CI 설정 https://travis-ci.com/ 에서 깃허브 계정으로 로그인을 한 뒤, github 연동을 활성화 프로젝트 설정 Travis CI의 상세한 설정은 프로젝트에 존재하는 .travis.yml / YAML로 설정 YAML이란? 쉽게 말해서 jSON에서 괄호를 제거 했다고 생각하면 된다. YAML 이념이 "기계에서 파싱하기 쉽게, 사람이 다루기 쉽게"이다 보니 익숙하지 않은 사람이라도 읽고 쓰기가 쉽다. 프로젝트의 gradlew과 같은 위치에서 .travis.yml을 생성한 후 아래의 코드를 추가 language: java jdk: - openjdk8 #1 branches: only: - master # Travis CI 서버의..
CI/CD 항해 71일차 2022.03.21 배포 자동화 서버에 기능을 추가 하려면 개발자가 로컬 PC에서 개발을 하고 테스트까지 진행한 뒤에 문제가 없을 경우 사용자가 사용할 수 있도록 수정된 코드를 실서버에 반영해야 한다. 서버에 반영을 하는 것을 "배포"라고 하고 배포(Deploy) 하기 위한 과정을 "빌드"라고 한다. 서비스에 사용자가 늘어나면서 운영하는 서버 또한 늘어난단다면 수동배포의 한계가 있을것이다. 운영하는 서버가 10대라고 하면, 10대를 모두 접속해 직접 배포할 파일을 SFTP를 통해 전달하고 서버를 종료하고 배포파일을 풀고 서버를 다시 실행시키는 작업을 10대에 진행을 해야하고 10대에 서버를 수동으로 진행하는 과정에서 배포가 누락되는 경우도 발생한다고 한다. 이런한 문제를 해결하기 위해 배포..