Coding Diary/diary, 회고 및 계획

[211222] 스프링과 리액트로 1인분 하기 위해 요즘 하고 있는 공부

kth990303 2021. 12. 22. 23:58
반응형

예전에 '운동일지 다이어리'를 친구랑 같이 만들다가, 어쩌다가 흐지부지된 프로젝트가 있다.

(안좋게 끝난 건 아니다. 서로 각자의 공부를 해야될 것 같다고 결론이 났다.)

https://kth990303.tistory.com/190?category=886864 

 

10월동안 잠깐 이 프로젝트를 중단하기로 했다.

이 프로젝트는 협업 프로젝트이기 때문에 내 일정 뿐만 아니라 친구 일정도 중요한데, 친구가 중간고사 끝나고 재정비를 가진 후 11월부터 프로젝트를 해야할 것 같다고 하여 10월 동안은 이 프

kth990303.tistory.com

요즘 헬스하면서 열심히 운동을 뛰고 있던 나에겐 좀 안타까운 상황...

그래서 좀 더 공부한 다음에, 저 프로젝트를 혼자 풀스택으로 해보려고 리액트와 rest api 스프링을 공부중이다.

학부생 수준의 간단한 프론트 코드는 익혀둘 필요가 있다고 생각하기도 하고, rest 통신은 요즘 시대에 필수적인 소양이기 때문이다.


객체지향 공부를 하고 난 뒤에 높아진 스프링 강의 이해도

스프링은 예전에 잠깐 들어두었던 실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화 강의를 다시 듣고 있다.

그런데 강의를 들으면서 신기한 현상을 겪었다.

우테코 프리코스를 해서 그런건지, 강의를 다시 들어서 복습효과가 나서 그런건지 모르겠는데, 이해도가 지난번에 비해 확연히 높아졌다는 것이다!

 

 

예를 들어 아래와 같은 Controller 코드가 있다고 하자.

@RestController
@RequiredArgsConstructor
public class MemberApiController {
    private final MemberService memberService;

    @PostMapping("/api/v1/members")
    public CreateMemberResponse saveMemberV1(@RequestBody @Valid Member member) {
        Long id = memberService.join(member);
        return new CreateMemberResponse(id);
    }

    @PostMapping("/api/v2/members")
    public CreateMemberResponse saveMemberV2(@RequestBody @Valid CreateMemberRequest request) {
        Member member = new Member();
        member.setName(request.getName());
        
        Long id = memberService.join(member);
        return new CreateMemberResponse(id);
    }
}

먼저 강의와는 조금 거리가 있는 MVC 얘기이긴 하지만,

private MemberService memberService로 서비스 계층을 선언해주는 코드에서 아래와 같이 생각이 바뀌게 됐다.


1회독: MVC에선 저게 국룰인가보다~ 외워야겠다.

2회독(현재): Controller에서 Service와 소통하기 위해 선언하되, private으로 은닉화해주었군. Service는 Controller가 어떤 작업을 하는지 알 수 없게 됐으므로 캡슐화도 잘 되었군.


아마 프리코스 과정에서 MVC가 왜 필요한지 고찰해보는 과정을 통해 한걸음 성장한 것이 아닐까 예상한다.

확실히 실전 경험이 중요한 듯하다.


또한, 예전에는 V1 메소드와 V2 메소드의 차이를 크게 실감하지 못했는데,

2회독을 하니까 Entity를 건드리지 말고 각 api 스펙마다 dto를 만들어야 하는 이유를 더 크게 실감했다.

Entity를 직접 건드리는 순간 api 스펙이 아예 바뀌기 때문에 유지보수가 굉장히 어려워진다. 따라서 객체지향적이지 못하게 되므로 dto를 만들어주도록 하는 것이다.


그리고 예전에는 static의 의미를 이해하지 못해 간단한 @Data 코드를 static으로 만드는 이유를 몰랐다.

하지만 지금은 안다. 어차피 아주 간단한 dto라서 강의에서 static으로 만든 것이었다. dto는 비즈니스 로직에 영향을 끼치지 않으며, entity가 아니기 때문에 객체지향에도 크게 어긋나지 않는다.

따라서 간단한 클래스를 static으로 만들어 다른 클래스에서 접근 가능하게 만든 것이다.

 

static 관련해서 내가 공부하고 기록한 내용은 아래 포스팅에서 볼 수 있다.

https://kth990303.tistory.com/226

 

[211206] 우아한테크코스 프리코스 2주차 후기

1주차 후기: https://kth990303.tistory.com/220 이번 2주차 미션은 3기 기수분들도 작년에 진행했던 '자동차 경주 게임'이었다. 자세한 요구사항은 https://github.com/woowacourse/java-racingcar-precourse 로..

kth990303.tistory.com


리액트 fetch, axios로 무언가를 만들면서 공부해볼 예정

리액트 공부를 간단하게 찍먹하고 있는데, 아직 많이 부족하다는 것을 느끼고 있다.

useEffect, useState와 같은 리액트훅에 대한 이해도는 다행히 3개월 전에 비해 꽤나 높아졌다.

하지만 아무래도 백준, 자바 공부에 좀 더 집중하다보니 아직 어설픈 단계를 벗어나진 못했다.

 

심지어 서버 팀에서 api를 만들어준 것을 useEffect로 fetch나 axios로 받아주어야 되는데, 그러질 못하고 있다 ㅎㅎ... fetch나 axios 사용이 굉장히 서툴러서 많은 연습이 필요할 듯하다.

개인적으론 axios가 좀 더 매력적으로 느껴지지만, fetch도 공부중이다. 어차피 둘이 거의 비슷해서 진입장벽이 크게 높아보이진 않아 다행이다 :)

 

리액트는 기초 문법을 떼고 난 뒤엔, 클론 코딩을 통해 익혀볼 생각이다.

Slack 클론 코딩[실시간 채팅 with React!] 이 강의를 들어볼 생각인데 어떨지는 잘 모르겠다.
 
강의를 다 듣고나서 스스로 연습 좀 해본 다음에,
스프링도 충분한 공부가 됐다 싶으면 위에서 말한 '운동일지 다이어리' 프로젝트를 혼자 진행해볼 예정이다.
 

일단 2022년 2학기에 복학하기 전에는 '운동일지 다이어리' 프로젝트를 만들어보고 배포도 해보고싶다.

 

물론 우아한테크코스 4기에 합격하거나, 친구들이 기획/디자이너/개발 연합 프로젝트를 하자고 하는 행운의 경우가 발생한다면 위 계획은 수정될 듯하다. 

 

2022년에는 개인공부보단, 팀원들과 소통 및 협업하며 프로젝트를 배포해보는 경험을 해보고 싶다 :)

그렇게 되길 바라며, 일단 지금은 그럴 실력을 만들기 위해 지금처럼 앞으로도 스스로 열심히 공부해놔야겠다.

반응형