전체 글 22

포스트 CRUD 기능 - 컨트롤러단 + API 테스트

프론트엔드 페이지 만드는 부분은 별도의 포스팅으로 분리하도록 하겠다.@Controller@RequestMapping("/anthive")@RequiredArgsConstructorpublic class PostController { private final PostService postService; @GetMapping("/{userId}/catalog-list") public String list_catalog(Model model, @PageableDefault(size = 20) Pageable pageable, @PathVariable("userId") String userId) { Page posts = postService.getUsersPosts(userId, ..

포스트 CRUD 기능 - 테스트 코드

테스트 코드 작성이 클린코드에서 중요하다고 말씀하셨으니 만들어야지.도메인 영역일단 게시글 엔티티의 도메인 규칙 테스트를 작성해 보자.class PostTest { Member member; Post post; @BeforeEach void setUp() { // given PublishBlogpostFormRequest request = getPublishBlogpostFormRequest(); // when member = Mockito.mock(Member.class); post = Post.of(request, member); } @Test @DisplayName("Post.of(): 요청값과 Mem..

포스트 CRUD 기능 - 도메인과 서비스단

디렉토리를 주제별로 나누어 주자. 토비님의 강의에서는 애그리거트 단위로 나눠주는 부분에 해당한다.일단 기본적으로 글을 올리고, 수정하고, 삭제할 수 있어야 한다(Create, Read, Update, Delete).포스트 CRUD 기능은 post 디렉토리를 만들어서 넣어주도록 하겠다.@Entity@Getter@NoArgsConstructor(access= AccessLevel.PROTECTED)@AllArgsConstructor(access= AccessLevel.PROTECTED)public class Post { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Setter private St..

회원가입 기능 - 테스트 코드 작성

토비님의 강의를 보면 테스트 코드가 클린코드 책에서 제일 중요한 부분이라고 말씀하신다.헥사고날도 클린코드의 기법중 하나이므로 테스트 코드를 작성해보자. 도메인 영역 테스트class MemberTest { Member member; PasswordEncoder passwordEncoder; @BeforeEach void setUp() { var registerRequest = createRegisterRequest(); passwordEncoder = createPasswordEncoder(); member = Member.register(registerRequest, passwordEncoder); } @Test void regi..

회원가입 기능 - 컨트롤러단 인풋 검증

로그인과 회원가입 화면 html(타임리프) 파일을 만들어서 resources에 넣어주고 컨트롤러를 만들어서 연결시켜주자.스프링 시큐리티의 필터체인에서 회원가입 url은 permitAll에 넣어줘야 한다.@Controller@RequiredArgsConstructor@RequestMapping("/member")public class MemberPage { private final MemberRegister memberRegister; @GetMapping("/login") public String login(){ return "member/login"; } @GetMapping("/register") public String register(Model mode..

회원가입 기능 - 스프링 시큐리티 커스텀 UserDetailsService + 도커 MySQL 적용하기

기존에 게시판 서비스를 만들 때 스프링 시큐리티를 사용한 내용은https://nimble-ship-2fb.notion.site/f944774f674842c6bb8124000fc3eca2?source=copy_link이곳에 정리해두었다. 그 결과물이 되는 코드로 시작해보자. @Configuration@EnableWebSecurity@Profile("!test")public class WebSecurityConfig { @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } @Bean public SecurityFilterChain securityFilterCha..

회원가입 기능 - 서비스단 헥사고날화, 회원가입 API

일단 회원가입을 하려면 회원가입 신청 DTO가 있어야 한다.@Data@AllArgsConstructor@NoArgsConstructorpublic class MemberRegisterRequest{ @Email private String email; private String nickname; private String password; private Set roles;}@Data가 getter와 setter까지 포함한다.이걸 record로 선언하게 되면 타임리프의 에러 검증에서 문제가 발생한다.아직 스프링 및 타임리프가 이런 신기능에 대응하는 업데이트를 덜 해서 그런 듯 하다. 챗지피티에 물어보니 스프링의 DataBinder가 필드 단위로 값을 주입하고 검증하기 위해서 빈 생..

회원가입 기능 - 회원 도메인, 이메일 VO 헥사고날화

https://www.inflearn.com/course/토비-클린스프링-도메인모델패턴-헥사고날-part1/dashboard토비님의 강의를 듣고 기존의 게시판 프로젝트를 갈아엎고자 한다.도커 데스크탑 설치하고 스프링 이니셜라이저에서 도커 컴포즈 라이브러리를 추가해서 프로젝트를 만들었다. MySQL은 따로 설치하지 않아도 도커가 만들어준다. 물론 도커를 킨 채로 프로젝트를 실행해야 한다.이 화면은 스프링 시큐리티가 자동으로 만들어주는 화면이다. 따로 설정하지 않으면 기본 아이디는 user, 패스워드는 랜덤하게 생성되어 콘솔 창에 출력된다.다시 여기부터 시작해보자. 아무것도 없는 곳에 컨트롤러를 만들었다. 축약어를 추가해서 편하게 코딩을 할 수 있다.일단 기본적인 회원 클래스를 만들고 그 회원의 권한 클래스..

우테코 8기 프리코스 오픈미션 회고

이번 8기부터는 오픈미션이라는 과제가 추가되었다. 제한 없이 본인이 하고 싶은 것을 2~3주간 수행하고 그 결과를 제출하는 것이다. 심지어 코딩과 관계가 없더라도 상관이 없다. 아니 이게 무슨...이 말을 듣고 느낀 것은, 이전까지의 미션과 같은 프로젝트를 수행하면 안 될것 같다는 느낌이었다. 뭔가 임팩트가 있어야 할 듯 했다. 결과적으로 내 결과물이 임팩트가 있다고 할 수 있을지는 모르겠다. 오픈미션 제출 후에 사람들이 디스코드에서 본인의 프로젝트를 소개한 것을 몇가지 봤는데 단순한 게임을 만든 사람부터, 25년 노벨 물리학상 주제였던 양자회로를 프로그램으로 시각화한 사람, 농구 슛폼 분석, 노래 추천 등 2주만에 했다곤 믿기지 않는 프로젝트들이 꽤 있었기에. https://github.com/exe..

우아한테크코스 프리코스 3주차 회고

이전 주차에서 느낀 점까지 포함해서 회고를 적도록 하겠다.현실적인 부분들과 맞닥트리게 되는 과제우테코 프리코스의 과제는 다른 분들이 짠 코드를 찾아보지 않는다면 눈치채지 못할 만한 부분들이 있다.다른 코딩테스트에 익숙한 분들이라면 과제를 받았을 때 그냥 절차형으로 코드를 나열해서 풀려고 하시는 분들이 많을 것 같다.하지만 프리코스는 말 그대로 성장하기 위한 과정이지 코딩 테스트가 아니다. 다른 코딩 테스트는 재귀, DP, 수학적 기법 등을 사용해서 획기적인 풀이를 찾아내는 것이 목적이라면 우테코 프리코스는 좀 더 현실에 가까운 기능 구현과 코드 구조에 대한 고민이 중점인 것 같다. 어떤 식으로 클래스를 나누는지는 각자의 자유지만 많은 분들이 MVC 구조를 채택한 모습을 보이셨다.이번주에는 이사를 진행해서..