본문 바로가기
Back-end/카카오테크캠퍼스

[카카오테크캠퍼스] 3단계 개발 1주차 회고

by 잔디🌿 2024. 9. 19.

    3단계가 시작되고 2주간은 최종적인 기획을 완료하는 시간을 가졌다. 우리 팀은 기획은 탄탄히 해두어서 이제까지는 별로 할 일이 없었다.

    하지만 이번주부터 본격적인 개발 시작이다! 열심히 해야겠다.

    ERD설계, API 설계

    아 2주차 때 erd와 api설계를 했다. 데이터베이스에서 배웠을 때에는 정말 어려웠는데, 저번 프로젝트 때 한번 경험해보니까 너무 쉬웠다. 역시 경험이 중요한 것 같다.

     

    데이터베이스 설계는 위와 같이 구성하였다. 다소 복잡하다ㅜㅜ

    데이터베이스 설계는 백엔드끼리 했다.

     

    그 다음 api설계를 했다.

    이런 식으로 다 작성해두었다. 생각보다 고려해야 할 점이 많았다. 

    우리가 해결해야 할 것은 구인글을 조회할 때 모든 정보를 반환할 때랑 개인별 정보를 반환할 때랑 endpoint가 같다는 것이다. 처음에는 경로변수로 id를 받으면 되지 않나? 라고 생각했는데, 클라이언트는 사용자의 id값이 아닌 토큰만 가지고 있어서 이는 불가능하다. 현재는 헤더에 토큰이 있냐, 없냐로 구분해두었는데 이게 잘 구현될지는 모르겠다. 우선 구현해보고 안되면 다시 회의해보기로 했다

     

    깃허브 세팅

    깃허브는 카카오테크캠퍼스 측에서 파주셨고, 여기 우리 팀원들이 다 들어갔다. 테크리더에게 권한이 있어서 나머지 팀원들이 weekly 브랜치에 pr을 날리면 리더님이 최종 머지를 해주신다.

    나는 우리 레파지토리를 포크해서 클론한 후 해당 프로젝트의 weekly브랜치에서 작업하고 push한 후 pr을 날렸다.

    처음에 포크할 때 master branch만 가져와서 지우고 다시했다.ㅜㅜ

     

     

    역할분담

    역할분담 회의를 했다. 처음에는 다들 맡은 부분만 컨트롤러부분을 작업하고 나머지는 다시 역할을 정할까 했지만, 각자의 방식으로 이미 개발을 해 둔 상태일 것 같아서 그냥 처음부터 맡을 부분을 정하고 끝까지 가져가되, 빨리 끝나면 도와주는식으로 개발하기로 했다.

    나는 이번학기 전공이 좀 널널해서 이력서 등록과 구인글 작성 및 조회 부분을 맡았다.

     

    controller 개발

    나는 api설계대로 구인글과 이력서 관련 부분의 controller을 개발했다.

    구인글 작성 및 조회

    api설계는 위와 같다. 원래 필드명이 한국말로 되어있었는데, 내가 번역해서 영어로 바꾸었다. 처음에는 파파고를 사용했는데, 뭔가 이상해서 나중에는 지피티한테 물어봤다. 역시 지피티가 훨씬 자연스러웠다.

    위에서 보면 dto는 크게 3개가 필요한데, 구인글응답, 구인글 요청, 구인글 축소판 응답이다. 

     

    package team18.team18_be.dto;
    
    public record RecruitmentRequest(
            String title,
            String companySize,
            String area,
            String requestedCareer,
            String detailedDescription,
            String majorBusiness,
            String eligibilityCriteria,
            String preferredConditions,
            String employerName
    ) {
    }
    package team18.team18_be.dto;
    
    public record RecruitmentResponse(
            String title,
            String companySize,
            String area,
            String requestedCareer,
            String detailedDescription,
            String majorBusiness,
            String eligibilityCriteria,
            String preferredConditions,
            String employerName
    ) {
    }
    
    package team18.team18_be.dto;
    
    public record RecruitmentSummationResponse(
            String title,
            String area,
            String employerName
    ) {
    }
    

    dto는 위와 같이 record로 만들었다. 필드가 굉장히 많다. mapping 과정이 두렵다.

     

    package team18.team18_be.controller;
    
    import org.springframework.http.HttpStatus;
    import org.springframework.http.ResponseEntity;
    import org.springframework.web.bind.annotation.*;
    import team18.team18_be.dto.RecruitmentRequest;
    import team18.team18_be.dto.RecruitmentResponse;
    import team18.team18_be.dto.RecruitmentSummationResponse;
    
    import java.util.List;
    
    @RestController
    @RequestMapping("/api/recruitments")
    public class RecruitmentController {
        @PostMapping
        public ResponseEntity<Void> saveRecruitment(
                @RequestHeader("Authorization") String token,
                @RequestBody RecruitmentRequest recruitmentRequest
                ){
            return ResponseEntity.status(HttpStatus.CREATED).build();
        }
    
        @GetMapping
        public ResponseEntity<List<RecruitmentSummationResponse>> getAllRecruitments(){
            return null;
        }
    
        @GetMapping("/{postId}")
        public ResponseEntity<RecruitmentResponse> getRecruitments(
                @PathVariable Long postId
        ){
            return null;
        }
    
        @GetMapping
        public ResponseEntity<List<RecruitmentResponse>> getAllEmployerName(
                @RequestHeader("Authorization") String token
        ){
            return null;
        }
    
    }

    구인 컨트롤러는 위와 같다. 현재는 service를 구현하지 않았으니 우선 다 null을 리턴하도록 했다.

     

    이력서 작성 및 조회

    이력서 api는 위와 같다. 이력서 내용 검증은 뭔지 잘 모르겠다. 다른 백엔드분들께도 물어봤는데 잘 모르겠다고 하셨다. 우선 이력서 내용 조회인 것 같아서 조회기능으로 구현했다.

    여기서 필요한 dto는 이력서 요청과 이력서 응답이다.

    package team18.team18_be.dto;
    
    public record ResumeRequest(
            String resumeId,
            String applicantName,
            String address,
            String tel,
            String preferredWorkLocation,
            String preferredIndustry,
            String preferredWorkingHours,
            String selfIntroduction
    ) {
    }
    package team18.team18_be.dto;
    
    public record ResumeResponse(
            String resumeId,
            String applicantName,
            String address,
            String tel,
            String preferredWorkLocation,
            String preferredIndustry,
            String preferredWorkingHours,
            String selfIntroduction
    ) {
    }

     

    dto는 위와 같다. 역시 필드가 많다. mapping...ㅎㅎ

     

    package team18.team18_be.controller;
    
    import org.springframework.http.ResponseEntity;
    import org.springframework.web.bind.annotation.*;
    import team18.team18_be.dto.ResumeRequest;
    import team18.team18_be.dto.ResumeResponse;
    
    @RestController
    @RequestMapping("/api/resumes")
    public class ResumeController {
        @PostMapping
        public ResponseEntity<Void> saveResume(
                @RequestHeader("Authorization") String token,
                @RequestBody ResumeRequest resumeRequest
        ){
            return null;
        }
    
        @GetMapping
        public ResponseEntity<ResumeResponse> getResume(
                @RequestHeader("Authorization") String token
        ){
            return null;
        }
    }

    이력서의 controller부분은 비교적 간단했다.

     

    파일생성

    아직 구현은 하지 않지만 service와 repository는 빈 파일 생성만 해두기로 했다.

    그래서 이렇게 구현했다.

     

    깃허브에 업로드

    이렇게 commit message를 남기고 push했다.

     

    그리고 개발하면서 회의했으면 좋겠다라고 생각한 내용을 정리하고 PR을 날렸다.

    무려 네명의 코드를 합치는 과정이 두렵지만 기대되기도 한다. 또한 코드리뷰 어떻게 해주실지도 궁금하다

     

    끝! 인줄 알았으니 회의를 한 후 변동사항이 있었다.

    merge된 코드 가져오기

    우리 팀의 패키지 규칙이 바뀌어서 한 팀원분이 이를 구현하여 PR을 날려주셨고, 이를 테크리더님이 merge 해주셨다.

    위 코드를 내 로컬로 가져오는데 어려움이 좀 있었는데 이에 대한 글은 따로 정리해두었다.

    https://ethereal-coder.tistory.com/255

     

    [git] Fork 한 저장소의 최신 코드 가져오기

    우리 프로젝트에서는 협업을 위한 repository가 있었다. 이 repository에는 master, feedback, weekly 등의 브랜치가 있었고, 나는 이 repository를 fork한 후 이 저장소를 내 컴퓨터에 clone 했다.  내가 해야 할

    ethereal-coder.tistory.com

     

    API, 필드 수정된 부분 고치기

    내가 건의한대로 이력서의 필드가 바뀌었다. 또한 다른 분의 의견으로 추가된 부분도 있어서 이를 수정했다.

    또한 추가된 api도 있었다.

    최종적으로는 위와 같이 만들어졌다!