본문 바로가기

study15

[JSCODE] 프로젝트 스터디 회고 활동 내용 2023.05.09 ~ 2023.06.01 기간동안 JSCODE에서 백엔드 프로젝트 스터디를 참여하게 되었다. 총 3명의 팀원들과 일주일에 2번씩 줌으로 만나 지난 과제 PR에 대해서 서로 피드백해주고 공부한 내용을 나누었다. 간단한 crud 기능부터 DB 연관관계를 추가하고 직접 배포해보는 작업까지 백엔드의 전반적인 프로젝트 진행과정에 대해 경험할 수 있었다. 배운 점 Spring Security를 사용해 스프링을 이용한 로그인 과정에 대해 공부해 보았다. 보안이라는 분야가 어렵고 깊어서 아직 배울 것이 많지만 어떻게 공부해나가야할 지에 대한 방향성을 잡은 것 같다. 예외처리에 대해서 어떻게 하면 구조상 효율적으로 공통되게 예외를 넘길 수 있을까 고민을 많이 했었다. 커스텀 예외, 검증예외 .. 2023. 6. 1.
[JSCODE] 1 : N 관계 사용자, 게시물, 댓글 엔티티들 간에 서로 연관관계를 맺게 구조를 설계하여 기능을 추가하였다. 사용자는 1개 이상의 게시글을 작성할 수 있다. 게시글의 작성자는 1명뿐이다. 1개의 게시글에는 1개 이상의 댓글이 달릴 수 있다. 1개의 댓글은 1개의 게시글에만 달릴 수 있다. 사용자는 1개 이상의 댓글을 작성할 수 있다. 댓글의 작성자는 1명뿐이다. 게시글을 작성하거나 수정할 때 사용자를 인증하는 기능이 필요했다. http header에 있는 token 정보를 이용하여 사용자의 아이디를 가져오는 방법도 있었지만 SecurityContextHolder에 저장되어 있는 인증 객체를 꺼내어 인증하는 방식을 선택하였다. public static Long getCurrentMemberId(){ final Authe.. 2023. 5. 31.
[JSCODE] 내 정보 조회 기능 앞서 구현한 Jwt를 사용하여 나의 정보를 반환하는 api를 구현해 보았다. 로그인을 할 때 받은 토큰을 파싱 하여 claim안에 있는 유저의 id를 꺼내어 작업을 수행하도록 했다. //Controller @GetMapping("/info") public ResponseEntity Info(@RequestHeader("Authorization") String token) { MemberResponse response = memberService.findMemberInfo(token.substring(7)); return ResponseEntity.ok(response); } 서비스 계층에서 TokenProvider를 통해 Authentication 객체로 변환하고 사용자의 id를 가져와 DB에 접근하도록.. 2023. 5. 27.
[JSCODE] JWT를 이용한 로그인 구현 JWT Json Web Token의 약자로 Json을 이용하여 사용자 인증을 위한 정보를 저장하는 토큰이다. Base64로 인코딩 되어 Header, Payload, Signature 3가지 부분으로 이루어진다. Header typ : 토큰의 타입 alg : 사용된 암호화 알고리즘 { "alg": "HS256", "typ": "JWT" } Payload Payload에는 클레임이라는 토큰에서 사용할 정보들이 담겨 있다. iss: 토큰 발급자(issuer) sub: 토큰 제목(subject) aud: 토큰 대상자(audience) exp: 토큰 만료 시간(expiration) nbf: 토큰 활성 날짜(not before) iat: 토큰 발급 시간(issued at) jti: JWT 토큰 식별자(JWT ID.. 2023. 5. 24.
[JSCODE] 회원가입, 로그인 기능 추가 회원가입 요구사항 회원가입 시 이메일, 패스워드를 받아서, DB에 이메일, 패스워드, 회원 가입 시간을 저장해야 한다. 유저에 대한 정보가 저장될 때, id(PK, primary key)도 같이 Auto-increment 형식으로 저장돼야 한다. 이메일에 반드시 @가 1개만 포함되어 있어야 한다. 이메일에 공백이 포함될 수 없다. 중복된 이메일이 존재할 수 없다. 패스워드에 공백이 포함될 수 없다. 패스워드는 8 자 이상 15자 이하여야 한다. 유저의 이메일로 유저를 식별하기로 하였기 때문에 이메일에 unique 제약조건을 설정해 주었다. 그리고 이메일 검증 어노테이션인 @Email을 사용하려고 했는데 생각보다 검증하는데 부족한 점이 많았다. 그래서 이메일의 검증 조건을 정규표현식으로 따로 정의해 주었다.. 2023. 5. 20.
[JSCODE] Elastic Beanstalk을 통한 배포 이번에는 AWS의 Elastic Beanstalk을 통해 지금까지 진행했던 프로젝트를 직접 배포해보기로 하였다. Elastic Beanstalk AWS EB란 upload 하는 것만으로 AWS 인프라에 애플리케이션을 쉽게 설정해주는 클라우드 배포 서비스이다. EC2 같이 여러가지 세부적인 세팅을 하지 않고 간편하게 앱을 배포하고 싶을 때 사용할 수 있다. 장점 적은 비용으로 배포가 가능하다. 비교적 쉽게 서버를 설정하고 변경 가능하다. 간단하게 배포할 수 있다. 단점 서버의 세부적인 설정을 다루기 위해서는 .ebextensions에 대한 지식이 필요하다. 특정 언어에 대해서만 배포를 지원한다. EB를 통해 배포를 해보는 것은 처음이었기 떄문에 여러가지 설정해 줘야할 것이 많았다. 문제상황 애플리케이션을 .. 2023. 5. 17.