블로그
전체 3#카테고리
- 백엔드
#태그
- 인프런워밍업클럽2기
- 백엔드
- 워밍업클럽
- 스터디기록
- 코틀린
- 스프링부트
2024. 10. 20.
0
[인프런 워밍업 클럽 2기 백엔드 프로젝트 과정] 3주차 발자국
I. 3주차 학습 내용 1일차 - 포트폴리오 사이트 화면 개발부트스트랩 템플릿 수정2일차 - 어드민 공통 기능 개발0) 오류의 종류자바 계열에서 오류는 크게 Error와 Exception으로 나뉜다Error는 애플리케이션에서 대응할 수 없는 오류로 - Stack OverFlow Error와 같이 개발자가 해결할 수 없는 오류이다.Exception은 애플리케이션에서 대응할 수 없는 오류로 - RuntimeException 과 같이 개발자가 대응하는 코드를 작성할 수 있는 오류이다. 1) 예외 처리 RuntimeException : 실행시점에 발생하는 예외 처리를 위한 클래스예외는 다양한 경우가 있을 수 있다. 하지만 모든 예외에 대응할 수 없으므로 그 외의 오류에 대응하는 코드를 작성해주어야 한다. Exception을 통해 예외를 정의해주고 Advice의 @ExceptionHandler를 통해 예외에 대한 처리를 지정해준다 2)DTO2-1 공통 Api 응답 포맷Api 응답의 공통 포맷 작성companion object: 클래스의 메서드를 각 클래스의 인스턴스 없이 호출할 수 있게 해줌 수정, 삭제, 저장 성공시에 대한 포맷을 작성해줌 2-2 폼 DTO공통 폼 요소 정의사용자 입력폼을 정의 포맷, 강의에서는 타입별로 text, date, select로 나눔 나는 개인 프로젝트에 date는 필요 없어서 text, checkbox, select 타입 포맷을 지정함 3) Interceptor요청과 응답 사이에서 특정 작업을 수행하는 역할interceptorConfiguration을 통해 admin 하위에 경로가 adminInterceptor에 영향을 받게 함addIPathPatterns - 특정 경로를 인터셉터 처리에서 포함excludePathPatterns - 특정 경로를 인터셉터 처리에서 제외 3일차 - 데이터 조회, 삽입 수정, 삭제 기능 개발 II. 3주차 미션 - 조회 API 개발하기3주차 미션강의 계획대로 진행하다 보니 과제가 조회 api 개발이 presentation을 통해 Json 포맷으로 웹 페이지의 결과를 띄우는건줄 알았는데 아니였나 보다 이번주 마지막 강의를 들어보니 조회 api는 따로 있었다. 망했다일단 Json을 통해 presentation 페이지에 띄우는건 어려운점이 크게 없었다. 사용자 정보를 저장하는 엔티티 이름을 User로 지정해서 SQL 예약어와 겹쳐서 User로 지정된 변수명과 연결된 클래스를 전부 UserInfo로 바꿔야 하는 문제 외에는 없었다. 조회 api 개발은 아직 진행 중이다. 연결된 엔티티가 정보 전체를 받아오는 문제, 리포지토리를 통해서 조회를 다시해야 하는 문제가 있어 엔티티, 리포지토리 코드를 전체적으로 수정하고 있다. 선택된 책 엔티티가 유저 엔티티 자체를 인자로 받다 보니 api를 개발할때 넘겨줄 인자가 없어 조회 코드를 작성하지 못해 userid만을 참조하도록 하고 selecbook repository에 getbyuserId를 추가하는 작업을 추가하는 중이다. 3주차에서 완주를 결국 실패하게 됬지만 모든 과정을 꾸준히 지속해 나갈 생각이다. III. 3주차 회고3주차 미션은 지금까지의 미션 중에서는 가장 어려웠다. 지금까지는 전체적인 아키텍쳐 구조를 잘 몰라도 어느정도 따라할 수 있었는데 테스트 코드가 까지 통과해야 하는 코드를 작성해야하다 보니 기존에 잘못 쓴 코드들을 다 들어내고 작업해야 하는 경우도 있었다. 처음 하는 작업이다 보니 설계단계에서부터 실수가 많이 보여 시간을 많이 들이고 있는 중이다. 그래도 이 부분을 잘 정리해서 다음부터는 좀 더 삽질을 덜 하게 되도록 노력하겠다. 경험 덕분에 클린 코드에 대한 새로운 관점이 생겼고 아키텍쳐에 대해 자세히 공부해야 겠다는 생각이 들었다. 코드 설계단계의 중요성도 새로 깨닫게 되었다.지금은 그저 미션을 위해서 끄적여 놓은 코드에 불과하지만 추후 과정이 끝나고 여유가 생겼을 때 코드를 좀 더 다듬고 이번 경험을 토대로 프로젝트 전체를 재설계하여 좀 더 완성도 높은 프로젝트로 완성하고 싶은 욕심이 생겼다.
백엔드
・
인프런워밍업클럽2기
・
백엔드
2024. 10. 13.
0
[인프런 워밍업 클럽 2기 백엔드 프로젝트 과정] 2주차 발자국
I. 2주차 학습 내용 1일차 - 데이터를 다루는 리포지토리 개발하기1) 데이터베이스 초기화테스트 데이터를 초기화 했음 @Component - 스프링에 빈으로 만들 클래스를 알려주는 것설명을 들으때마다 이런 기술들을 통해 스프링의 위대함을 잘 알려주는 것 같다. 스프링이 없었다면 개발을 위해 직접 인스턴스를 생성하고 관리해야 했을텐데 복잡한 서비스에서는 스프링이 필수라는 것을 잘 느낄 수 있는 것 같다. @Profile - 특정 value일 때만 빈으로 생성@PostConstruct - 빈 생성 직후 postConstruc 과정시에 실행 되도록 해줌 1일차 과정 중에는 프로젝트에 사용할 테스트 데이터들을 정의 하고 필요한 곳에 초기화 하였음코틀린 문법에 익숙하지 않아 혼자서 생각하면서 작성하지는 못했으나 파이썬이나 JS, Java 등 프로그래밍 언어에 어느 정도 익숙한 사람이라면 추측 가능한 코드들이 많아서 어렵지 않았습니다. 코틀린 문법에 익숙해지기 위해 코틀린의 리스트 생성등 기초 문법을 찾아 보는 등 다른 공부에 시간을 많이 할애 할 수 있는 시간이였습니다. 2일차 - 리포지토리 테스트 하고 성능 개선하기들어보기만 했던 대망의 테스트 코드 작성@DataJpaTest - Jpa 관련 테스트 어노테이션@TestInstance - 테스트 인스턴스를 관리 강의에서는 인스턴스의 라이프 사이클을 클래스 단위로 정의해주는 역할을 했음assert - 개발 및 디버깅을 전제로 사용하는것, 비즈니스 로직과 검증 로직은 구분할 수 있음 코드나 개념적으로 어려운 부분은 없었음. 테스트 코드를 작성하면서 해야할 생각에 대해 배운게 더 많았다. 데이터가 어떻게 서로 전달되고 결과는 어떻게 나와야할지 클래스를 추상화 하듯이 생각하면서 오류를 잘 발견할 수 있게끔 그러면서도 테스트 코드의 가독성은 높게 작성하는 것이 좋은 테스트 코드라는 생각이 들었다. 개발자 관련된 소식을 접하다 보면 테스트 코드에 대해서 많이 들어보게 됩니다. 저는 아직 제가 테스트 코드 같이 딥한 내용을 배우기보다는 기초에 더 투자할 때라 생각하여 한번도 테스트 코드 작성과 관련해서 고민 해본적도 작성해본적도 없었습니다. 하지만 테스트 코드에 대해서 배우고 나니 생각보다 어려운 개념이 아니였고 기초 단계의 공부와 코드 작성에 많은 도움을 주었습니다. 오류의 탐색 범위를 줄이는데 도움을 주었고. 완성될 프로젝트의 작동 과정에 대해 코드적으로 고민해 보니 다른 코드들이 어떻게 작성되어야 할지 간접적으로 생각해보게 되었습니다. 이는 나중에 제가 개인 프로젝트를 할때 큰 도움이 될것 같았습니다. 항상 어려운 개념이라고 느껴졌던 테스트 코드에 대해서 선입견을 깨는 좋은 경험이였습니다. 3일차 - 데이터를 조회하고 변환하는 서비스 개발 II. 2주차 미션 - REST API 설계하기왜 백엔드가 상상력이 풍부한 사람들이 해야 하는가에 대해 깨달았던 시간 어떤 유튜브 동영상에서 백엔드 개발자는 상상력이 많은 사람들이 해야하는가에 대해 관한 이야기를 하는걸 봤었다.백엔드 개발자는 상상력이 풍부한 사람이여야 한다.당시에는 이해하지 못했지만 미션을 해결하면서 어느 정도 깨달음을 얻은 것 같다. 이번 미션은 REST API 설계였다. 대학교에서 과제를 하면서 카카오 REST API를 활용한적 있는 나한테는 그리 어려운 과제가 아닐거라고 생각했었다. 하지만 API를 사용하는것과 설계하는 것은 달랐다. API를 설계하면서 나는 내가 작성했던 ERD를 다시 보았다. 그때 당시에는 꽤 괜찮은 설계라고 생각했었는데 api를 통해 데이터가 오가는걸 생각하니 잘못된 부분이 보여 몇 군데를 수정했다. 연결관계에는 문제가 없었지만 데이터를 주고 받는데 불필요한 외래키와 중복키가 있어서 제거 하였다. 이번 과제를 하면서 가장 고민했던 부분은 API 설계 툴이였다. 그냥 표로 간단하게 정리해서 설계를 하려 했었는데 다른 분들이 올리신 API 설계를 보니 특정 툴을 이용해서 올린게 너무 멋있어 보였다. 그래서 PostMan, Swagger, GitBook 등을 찾게 되었다. 하지만 안타깝게도 개인적인 사정으로 바쁜 나머지 툴들을 이용해서 과제를 올리지는 못했다. PostMan과 GitBook이 내 마음에 들어서 추후 워밍업 클럽 과정이 끝나면 해당 툴들에대해 공부하는 시간을 가져야겠다. III. 2주차 회고2주차는 개인적으로 바쁜 시간이였습니다. 개인적인 일들로 많이 바쁜 시간이었고 집에오면 몸이 지쳐서 강의를 제때도 못듣고 대충 듣고 넘어가기도 했던 것 같습니다. 평소라면 그냥 넘어갔다가 기억을 다 잊은 상태에서 다시 강의를 들으러 왔었겠지만 워밍업 클럽을 신청하게 된 다짐과 동기, 그리고 앞으로 해야 할 과제들을 생각하면서 시간 날 때마다 강의를 다시 들어 빠르게 내용을 습득하고 제 것으로 만들 수 있었던 것 같습니다. 시작한지 얼마 안 지난것 같은데 벌써 10월의 절반이 갔고 워밍업 클럽의 진도도 50%가 넘어가고 있는데 저 같이 꾸준하지가 못한 사람들은 마음을 다시 다잡을 때인것 같습니다. 앞으로도 계속 정진하여 완주 하는 것을 목표로 달려보겠습니다.
백엔드
・
인프런워밍업클럽2기
2024. 10. 06.
0
[인프런 워밍업 클럽 2기 백엔드 프로젝트 과정] 1주차 발자국
참여 동기바야흐로 2024년 8월 13일 1년 6개월간의 군생활을 마치고 전역했습니다.전역 후 아직 미래에 뭘 할지 몰라서 게임 개발, 웹 개발 등등 이것저것 뚝딱이면서 시간을 보내고 있었는데... 메일함에서 발견한 인프런 워밍업 클럽2기 홍보 메일독학의 한계항상 물어볼 곳을 찾고 싶었다.아마 대부분의 초보 코딩 독학러들이 하는 고민일까 싶습니다. 강의를 듣고 내가 프로젝트를 해나가도 내가 하는 방법이 맞는 걸까? 내가 짠 코드가 쓸만한 코드인가? 누군가가 내 코드를 보고 리뷰해줬으면 좋겠고 내가 하고 있는거에 대한 피드백을 해주기를 원했습니다. 부트 캠프는 좀 힘들고...그렇다고 부트캠프나 따로 받기에는 지역도 서울 경기 지방으로 한정되어 있고 대부분 6개월 정도의 긴 기간의 대면 수업을 요구합니다. 지방대생인 저로서는 그런 부트캠프보다는 기간이 짧고 비대면인 워밍업 클럽은 최적의 조건이였습니다. 다른 사람들 생각도 좀 들어보고 싶다.아직 낯설지만 천천히 가보겠습니다.덤으로 다른 개발자들과 소통할 수 있는 창구가 생기는 것 또한 마음에 들었습니다. 다른 개발자들의 생각과 공부법에 대해 궁금한점이 많았던 저에게 워밍업 클럽은 더없이 좋은 기회라 생각하여 신청하게 됬습니다. 1주차 발자국코틀린과 백엔드에 대해 몰라도 따라갈 수 있었습니다.처음에는 코틀린과 스트링 부트에 대해 아는게 하나도 없어서 잘 따라갈 수 있을까 걱정했었는데 양질의 강의 자료와 자세한 설명덕분에 이해하기 수월했습니다. 특히 시작전에 완성된 결과물과 기능에 대해 설명해주셔서 코틀린을 잘 몰라도 코드의 의도를 파악할 수 있어서 좋았습니다. 더 알고 싶은 부분들은 생활코딩 강좌와 구글 검색 chat gpt와 함께 해결해나갔습니다. 1일차 - 섹션1 웹 개발 기본과 프로젝트 준비개발할 프로젝트에 대한 기능 설명과 웹의 동작 원리에 대해 배웠습니다.I. 웹 서비스 구성 요소1) 클라이언트요청 주체 2) 서버응답 주체서버간 통신에서는 서버가 요청 주체가 될 수도 있음 3) 데이터베이스데이터의 집합RDBMS를 의미하기도 함 II. 브라우저에서 주소창을 입력하면 일어나는 일1) 클라이언트 DNS클라이언트가 DNS에 도메인을 보내면 DNS에서 도메인에 해당하는 IP 주소를 찾아서 알려준다. 2) 서버에 데이터 요청클라이언트가 전달된 IP 주소를 통해 서버에 작업을 요청하며 작업에 필요한 데이터를 함께 전달 3) 서버에서 작업 처리서버는 작업을 처리하며 일반적으로 데이터베이스에 대한 CRUD(삽입, 조회, 수정, 삭제) 등의 작업을 수행한다. 4) DB 결과 반환데이터베이스가 서버에서 요청한 결과를 반환한다. 삽입, 수정, 삭제의 경우 작업의 성공 여부를 응답하고 조회의 경우 조회도니 데이터를 전달한다. 5) 작업 결과 클라이언트에 전달서버가 반환된 결과를 클라이언트에 응답 한다.III. 웹 프레임워크와 Spring1) 웹 프레임워크동적 웹 서비스 개발을 편리하게 만들어주는 도구라이브러리와 다른 점은 제어의 주도권이 프레임워크에 있다. (라이브러리는 사용자가 주도권을 가짐)2) Spring Framework자바 기반의 웹 프레임워크웹 서버 개발을 모듈화 3) MVC 패턴 (Model-View-Controller)소프트웨어 아키텍처 디자인 패턴 중 하나데이터와 화면 전달 과정의 역할을 분담해 놓아 유지보수성을 높임 1) Model : 데이터 담기 2) View : 사용자에게 보내지는 화면 담당, 데이터 꺼내옴3) Controller : 요청 받아 작업 수행, Model에 데이터 넣음 4) 레이어드 아키텍처(Controller-Service-Repository)가장 대중적인 소프트웨어 아키텍처 기능별로 세가지 계층으로 구분됨Presentation(Controller)클라이언트가 요청할 수 있는 인터페이스를 정의 Business(Service)목적에 맞게 데이터를 처리 Data Access(Repository)데이터베이스에 접근하여 작업 요청, 다양한 데이터베이스 처리 방법을 제공하면 여러 서비스에서 공통적으로 사용할 수 있다. 5) 스프링 Bean과 의존성 주입(Dependency Injection)Bean : 스프링에서 관리되는 객체를 의미한다. 스프링 컨테이너가 주체가 되어 객체를 관리하는 것 이를 제어의 역전(Inversion of Control), IoC이라고 한다. 처음에는 상속과 동일한 것이라고 생각했는데 상속과는 분명한 차이점이 있었다.Chat Gpt 검색에 따르면 상속과 DI의 차이점은 의존성을 내부에서 관리하냐 외부에서 관리하냐에 따른 차이라고 한다.의존성 주입은 의존성을 외부에서 관리하므로 객체간 결합도를 낮추어 독립적으로 이용되어 코드를 유연하게 구성할 수 있는게 장점이라고 한다. 상속의 목적은 공통 기능을 공유하여 코드의 중복을 줄이는 것, 의존성 주입은 객체간의 결합도를 줄이고 코드 유연성을 높이는것에 초점이 맞춰져 있다. ex) Service와 Client 객체가 있을때 아래와 같이 외부에서 객체를 주입한다.val service = Service() val client = Client(service) client.doWork() IV. HTTP와 REST API HTTP(Hyper Text Transfer Protocol)네트워크로 통신하는 두 컴포넌트 간의 통신 규약요청/응답1) RequestStartLine, Header, Body로 이루워짐Start Line : HTTP 메서드 , URL, HTTP 버전을 표시Header : 컨텐츠의 길이, 유형, 클라이언트 정보 표현Body : 서버에서 작업을 처리하기 위해 필요한 실질적인 데이터2) ResponseStartLine, Header, Body로 이루워짐Start Line : HTTP버전, 상태 코드, 메시지를 표현Header : 컨텐츠의 길이, 유형, 클라이언트 정보 표현Body : 응답 결과 데이터HTTP 요청 메서드Get, Post, Put, Patch, Delete각각 Read, Create, Update, Delete 작업을 요청할 때 사용c.f) Put과 Patch의 차이점 : Put은 리소스 전체를 새 데이터로 교체, Patch는 리소스의 일부만 수정HTTP 상태 코드요청의 처리 결과를 표현하는 코드 100 단위로 의미를 가지며, 상세한 코드로 구체적인 결과를 표현하기도 한다.200 : Ok300 : Multiple Choice400 : Bad Request500 : Internal Server Error Rest ApiHttp 통신으로 동작하는 어플리케이션 기능을 정의하는 컨벤션 강제성은 없음URL을 이용한 표현HTTP 메서드를 활용한 행위의 표현HATEOAS 준수복잡한 비스니스에서는 REST를 준수하기 어렵기 때문에 팀의 컨벤션을 만들어두는 것이 좋다. V. 데이터베이스의 정의데이터의 집합, DBMS관계형 DB, 비관계형 DB로 나누어짐관계형 DB는 표를 통해 데이터를 표현하며 각 표(테이블)은 관계를 가짐 비관계형 DB는 관계형 DB를 제외한 모든 DB (key-value형 등) VI. JPA(Java Persistence Api)자바 ORM 기술 표준 인터페이스1) ORM인스턴스와 관계형 데이터베이스를 매핑해주는 기술 2) 트랜잭션여러개의 DB 작업을 하나로 묶어주는 것 (두 작업이 모두 실패하거나 성공하도록 묶는 것) 2일차 - 섹션2 개발 - Domain흠... 기본 문법도 모르군객체 지향 프로그래밍도 알고 강의에서 어떤 역할을 하는 코드인지 계속해서 설명해주셔서 코드를 이해하는데 막히지는 않았습니다. 설명이 없는 개념은 대충 추론해가며 강의를 빠르게 들었습니다. 하지만 워밍업 클럽 미니 프로젝트를 위해서는 결국엔 기본 문법에 대해 어느 정도 알고 있어야 할것 같아 강의 코드를 중심으로 GPT와 유튜브 무료 코틀린 강의를 보면서 독학하는 시간을 길게 가져갔습니다. (Annotation과 Package에 관해서도 하나도 몰랐었을 정도로 무지했습니다...) 강의를 보고 따라한 후 Chat Gpt에 코드를 복붙 필요한 개념에 대한 간단한 설명과 함께 부탁했고이를 토대로 개념을 간단하게 학습한 후 추가적으로 궁금하거나 더 알아보고 싶은 부분을 적어 놓은 후 2일차 공부를 마무리 했습니다. 3~4일차 - 복습 및 과제강의를 빠르게 한 번 더 훝어본 후 2일차에 적어 놓은 부분을 구글 검색과 유튜브 등으로 해결 했습니다. 알바를 하면서 모르는 개념을 공부하고 과제도 하다 보니 시간이 촉박했지만 속도보다는 더 자세하게 이해하는게 더 중요하다고 생각해서 개념 공부에 시간을 많이 투자했습니다. 다행히 1주차에는 익숙한 깃에 대한 개념 강의가 섞여 있어서 좀 더 여유롭게 과제에 투자할 수 있는 시간이 있었습니다. 1주차 과제 - 프로젝트 ERD 작성음 분명 강의 들었을땐 이해됬었는데강의에서 사용한 포트폴리오 사이트에 대한 테이블 설계에 대해서는 이해가 정말 잘 되었습니다. 하지만 제 프로젝트에서는 테이블을 어떻게 나눠야 할지 아직 이해가 부족했습니다.추가로 생활코딩님 유튜브를 보면서 공부한 후 다시 강의를 들으니 이해가 훨씬 수월 했습니다. 혹시 저처럼 테이블 설계에서 어려움을 느꼈던 분들은 보시면 도움이 될거 같습니다.https://www.youtube.com/watch?v=1d38YZKCM88&list=PLuHgQVnccGMDF6rHsY9qMuJMd295Yk4sa 처음에는 ERD를 나눌 때 HTML, CSS 작성할때처럼 종속관계가 있어야 좋다고 생각했었지만 강의를 듣고나서는 유지 보수와 확장을 고려해 서로 간의 의존도를 줄이는게 중요하다는걸 알았습니다. 최종적으로 작성된 ERD입니다. 전체 구성사용자 -> 목표로 선택된 책 -> 도서별 세부 목표 -> 목표마다 달린 댓글 구조로 설계했습니다. 사용자 -> 목표로 선택된 책1:N 관계입니다 한명의 사용자가 여러개의 책을 선택할 수 있기 때문에 이렇게 설계했습니다. 처음에는 웹에 있는 도서 목록을 크롤링해서 DB에 넣은 다음 도서 선택을 하는 식으로 할까 고민했었는데 크롤링할 양도 많고 DB에 없는 책을 목표로 선정하고 싶은 경우가 생길 것 같아서 그냥 사용자가 직접 목표 책에 대해 작성할 수 있도록 설계하기로 했습니다. (추후에 서비스를 좀 더 확장하게 된다면 Yes24나 교보문고 같은 사이트에 연결하며 광고 등을 붙이는 구성을 생각하고 있습니다. 만약 그렇게 된다면 유저가 직접 작성한 책과 연동된 책을 따로 다른 테이블에 두어 작성하는것이 기존 DB를 수정하지 않아도 되서 더 좋을거 같다고 생각합니다.) 등록된 책 -> ChosenBook1:N 관계입니다. 등록된 책을 다른 여러 사람들이 선택해서 사용할 수 있기에 이렇게 작성했습니다. 책을 처음 등록하면 DB에 저장하고 다른 사람들이 같은 책을 목표로 삼을때 사용할 수 있도록 지정하면 DB 부담이 좀 줄어들거 같다고 생각해서 이렇게 설계했습니다. 목표로 선택된 책 -> 세부 목표1:N 관계입니다. 하나의 책의 여러개의 세부 목표를 둘 수 있기에 이렇게 설계했습니다. user에 바로 연결할지 아니면 책과 연동해서 작성해야 할지 고민했는데 사용자별 목표를 보여주는 것보다는 도서별 목표로 보여주는 것이 좀 더 독서 습관 만들기라는 취지에 더 어울릴 것 같아 이렇게 설계했습니다. 세부 목표 -> 댓글1:N 관계입니다. 목표별로 다른 사용자들이 여러 댓글을 달 수 있기에 이렇게 설계하였습니다. 5일차 - 최종 점검최종 점검 이라 적었지만 거의 대부분은 다른 분들이 올리신 과제를 확인하면서 제 과제에 잘못된 부분은 없는지 확인하는 시간이였습니다. 아직 ERD에 대한 확신이 없어서 과제를 올린 후에도 여러번 고쳤던것 같습니다.https://github.com/dellyu03/bookjeogX2ㄴ 혹시 ERD나 프로젝트에 대해 지적해주실 분 있으시면 언제든 환영입니다. 1주차 회고군대를 전역하고 나서 새로 시작한 알바와 워밍업 클럽 과정을 병행해나간 바쁜 한 주였습니다. 휴학하면서 혼자서 공부할 때면 집중하기도 어렵고 딴 짓 하기 바빴는데 정확한 목표를 설정해 주시고 과제도 내주시니 집중이 더 잘되었습니다. 혼자서 그냥 설렁설렁 한달 공부했던 효과를 1주일 압축으로 해낸 것처럼 배운것도 정말 많았습니다. 앞으로도 이렇게 천천히 노력해가면서 꼭 완주를 해내겠다는 다짐을 하게된 한 주였습니다.
백엔드
・
워밍업클럽
・
스터디기록
・
백엔드
・
코틀린
・
스프링부트