본문 바로가기

분류 전체보기72

[자료구조] HashMap과 TreeMap HashMap HashMap은 해시테이블 기반의 Map으로 데이터를 Key-Value 쌍으로 저장한다. 내부적으로 key를 해시함수를 통해 인덱스로 변환하여 bucket에 저장한다. 따라서 HashMap은 Key-Value쌍끼리의 순서를 보장하지 않고 랜덤 하게 저장된다. c++에서는 다음과 같이 HashMap을 사용할 수 있다. #include #include using namespace std; int main() { unordered_map m; return 0; } HashMap에서의 삽입, 삭제, 탐색을 할 때 시간복잡도는 모두 O(1)에 수행된다. 순서를 보장하지는 않지만 TreeMap에 비해서 속도가 빠르다는 장점이 있다. 삽입 m.insert({k,v}); m[k] = v; 삭제 m.era.. 2023. 6. 19.
[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.