본문 바로가기

프로젝트/멋사 개인 프로젝트 (mutsa-SNS)

(26)
[09] mutsa-SNS 4일차 - Post 조회 기능 추가 등록한 post를 조회하는 기능을 추가하였다. postId를 통해 1개의 글 조회 전체 Post 조회 1. Domain Post public class Post extends BaseEntity{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String body; private String title; @ManyToOne(fetch = LAZY) @JoinColumn(name = "user_id") private User user; public PostDto toResponse() { return PostDto.builder() .id(this.getId()) .userName(this.getUser().g..
[08] mutsa-SNS 3일차 - (3) JwtTokenFilter Exception 추가 낮에 JwtTokenFilter에서 Exception을 추가를 시도해 보았지만, AuthenticationEntryPoint를 추가하지 않아 오류가 났었다. 곰곰히 생각해보니, JwtTokenFilter에서 토큰이 없거나, 토큰이 잘못된 경우 Exception을 throw하여 json형식으로 view에 출력하는 것이 좋을 것 같아 추가해 보았다. 다만, Jwt token형식을 주어 token이 잘못되었을 때 testcode를 작성하고 싶었으나, 실패하였다. 이에 대해서는 좀 더 고민이 필요 할 듯 하다. 1. Configuration JwtTokenFilter @RequiredArgsConstructor @Slf4j public class JwtTokenFilter extends OncePerReques..
[07] mutsa-SNS 3일차 - (2) 글쓰기 기능 글쓰기 기능을 추가해 보았다. 글쓰는 기능은 유효한 토큰을 가지고 있는 유저만 사용 가능하게 하였다. 1. Configuration JwtTokenUtil public class JwtTokenUtil { private static Claims extractClaims(String token, String key) { return Jwts.parser().setSigningKey(key).parseClaimsJws(token).getBody(); } public static boolean isExpired(String token, String key) { Date expiredDate = extractClaims(token, key).getExpiration(); return expiredDate.bef..
[06] mutsa-SNS 3일차 - (1) User 수정 1. UserRole type 수정 post 작성 기능을 만들기 전 User Entity에서 userRole을 enum에서 string으로 변경했던 것이 생각이 났다. 그 때에는 계속 db에 enum의 name이 들어가지 않고, index가 들어갔었는데, 이는 User에서 column지정을 할 때 어노테이션을 붙여주지 않았기 때문으로 추정된다. @Enumerated(EnumType.STRING) private UserRole role; ERD에서 요청했던 사항은 userRole을 enum으로 설정하라 지시하였기 때문에, 그것이 맞는 것 같아 다시 enum으로 고쳐주었다. 그 과정에서 ADMIN과 USER를 구분하는 것을 int index로 enum에서의 순서대로 지정해 주었다. UserService in..
[05] mutsa-SNS 2일차 - (2) 로그인 기능 로그인시 JWT token을 부여하는 기능을 구현하였다. JWT 란? JWT (JSON Web Token)란 인증에 필요한 정보들을 암호화시킨 JSON형태의 토큰이다. 위의 형태로 구성되어 있으며, header에는 JWT 에서 사용할 타입과 해시 알고리즘의 종류가 담겨 있으며, payload에는 사용자 권한과 정보, signature에는 header, payload 를 Base64 URL-safe Encode 를 한 이후 header 에 명시된 해시함수를 적용하고, 개인키(Private Key)로 서명한 전자서명이 담겨있다. header와 payload는 단순히 인코딩된 값이기 때문에 제 3자가 복호화 및 조작할 수 있지만, signature는 서버 측에서 관리하는 비밀키가 유출되지 않는 이상 복호화할 ..
[04] mutsa-SNS 2일차 - (1) 회원가입 test code 회원가입 controller의 test code를 추가하였다. 회원가입 성공, 실패 두가지 case에 대해 실행하였다. 1. TestCode UserControllerTest @WebMvcTest(UserController.class) class UserControllerTest { @Autowired MockMvc mockMvc; @MockBean UserService userService; @Autowired ObjectMapper objectMapper; @Test @DisplayName("회원가입 성공") @WithMockUser void join_success() throws Exception{ UserJoinRequest userJoinRequest = UserJoinRequest.builde..
[03] mutsa-SNS 1일차 - (2) 회원 가입 기능 회원 가입 기능을 구현하였다. 클라이언트에게 userName와 password를 받아 회원가입을 진행한다. 1. Domain UserEntity @Builder @AllArgsConstructor @NoArgsConstructor @Getter @Table(name = "user") @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String password; private Timestamp registeredAt; private String role; private Timestamp updatedAt; @Column(unique = true) private S..
[02] mutsa-SNS 1일차 - (1) CI/CD 설정 첫째 날은 CI/CD 설정과 회원가입 기능을 구현하였다. 1. Gitlab project 생성 https://gitlab.com/pigeon2gugu/finalproject_kimhaneul 하늘 / FinalProject_KimHaneul · GitLab GitLab.com gitlab.com 처음에 root directory 안에 repository를 추가하여 진행하려 하였으나, 후에 docker build에서 root가 아닌 repository여서 문제가 생겨 root에 바로 생성하였다. 위의 과정에서 repository 이름을 대문자로 하여 build과정에 문제가 생겼다. 주의가 필요 할 듯 하다. 2. java project 생성 Gradle - Groovy로 생성 Java 11로 생성 Lomb..