게시글
질문&답변
테스트 통과하면 천하무적?
안녕하세요 정예은 님!'천하무적'이라고 할 수는 없습니다.테스트 코드 통과는 소프트웨어의 '완벽함'을 보장하지 않고, 실제 환경에서 예상치 못한 변수로 문제가 발생할 수 있습니다. 하지만 우빈님의 강의를 통해 '좋은 테스트 코드 작성법'을 꾸준히 학습하시다 보면, 리팩터링 시 '더 나은 안정감'을 얻으실 수 있을 것 같아요.도움이 되셨기를 바랍니다.감사합니다. 🙂
- 0
- 3
- 164
질문&답변
추상화 레벨
1. 주석을 사용하지 않는 코드가 '진짜 클린 코드'다?'클린 코드는 는 주석을 사용하지 않는다'라는 표현도 심심치 않게 보는 것 같아요. 그런데 뭐든 극단적으로 하면 장점보다 단점이 많다고 생각해요.물론 인지비용을 줄이기 위해서 '읽기 좋은 코드'를 작성해야 한다는 점은 동의합니다. 그래도 필요에 따라 팀의 인지비용을 줄이는 방법이 주석이라면 저는 주석도 괜찮다고 생각해요. (이단)결국, 중요한 점은 '어떻게 인지비용을 줄일 수 있을까?'를 고민해야 한다고 생각합니다. 2. 코드스멜이 나지 않아요.(... 저도 마찬가지지만) 게임 강화 '천장 시스템'처럼 의식적으로 비용을 투자하는 방법밖에 없다고 생각합니다! (혹시 좋은 방법 있으면 공유 좀 부탁드려요) 경험 없는 1인의 지나가며 작성합니다... 🙂↕
- 0
- 3
- 378
질문&답변
sql 단축키
Reformat Code 기능을 찾으시는 것 같습니다.Mac: CmdOpt LWindow: Ctrl Alt LSQL 외에도 코드정리 시 사용가능합니다.
- 0
- 2
- 272
질문&답변
[해결완료!!] Error: Something went wrong installing the "sharp" module
같은 문제를 겪었습니다. 답변 공유해 주셔서 감사합니다.
- 2
- 2
- 4.6K
블로그
전체 72024. 10. 27.
1
[인프런 워밍업 스터디 클럽] 2기 - 마지막 발자국
누군가에는 길기도, 짧기도 했던 워밍업 클럽 일정이 종료됐다.*물론 완주까지 '수료식'이라는 태산 같은 축제가 기다리고 있다. 이전 3주 차까지는 테스트를 작성하는 자세와 기본 개념에 대해 배웠다면, 이번 주는 '테스트를 그래서 어떻게 사용하면 좋을까?' 고민하고 의견 나누는 시간을 가졌다. 강의섹션 6. Spring & JPA 기반 테스트: 어떤 생각, 의도를 가지고 테스트를 작성하면 좋을까?섹션 7. Mock을 마주하는 자세: 그래서 Mock 좋아하세요...?섹션 8. 더 나은 테스트를 작성하기 위한 구체적 조언: 음성을 듣고 지식공유자의 의도를 추론하라.섹션 9. Appendix: 묻고 따지지 않고 바로 적용하여 생산성 올리기섹션 10. Outro: 잊지마세요. 당신의 초심과 철학 실습이 많았던 강의였던 만큼 호흡이 길었다. 그런데 마침 컨디션 관리도 실패했다. 감기에 걸려 곤혹을 치뤘다.'완주러너 못할 수도 있겠다'라는 불안, 당혹감도 찾아왔다. 컨디션이 좋아졌을 때 '계왕권'을 사용했다. 결국 모든 조건을 만족했다. 미션Layered Architecture는 왜 그럴까?Mock을 마주합니다. 그런데 Test Fixture를 곁들인색다른 방법으로 해결했다. 이전에는 '강의를 듣고 나서 생각을 정리한다'라는 관점을 가졌다. 하지만 이번 주는 '우선 해결한다'라는 방법을 적용했다. 출제자의 의도를 먼저 분석했다. 다시 한번 '오늘부터 내 꿈은 너야' 대사를 외치며 마법을 사용했다. 오랜 시간을 사용하지 않고 간단한 프로토 타입을 만든다는 생각으로 임했다. 결국 빠르게 문제를 해결할 수 있었다. 그런데 문제 해결보다 더욱 좋았던 점은 사고 확장이다. 우빈 님께서 생각하시는 의견과 내가 알아내 지식과 무엇이 다른지 생각하고, 정리할 수 있었다. 조금 더 능동적으로 사고했다고 생각한다.(물론 이번 주 미션이 코드에 의도를 담는 작성 미션이 아닌 정리 미션인 덕분에 빠르게 해결한 것 같다는 생각도 있다) 정리하면 '예습 후 복습'이라는 학창 시절을 회상하는 원론적인 방법을 적용했다. 적용하고 나니 상황에 따라 적절한 방법이라고 생각한다. 이전에는 '미션에 너무 많은 자원을 사용하고 있지 않나?' 의문도 들었는데 이번에는 빠르게 해결하고 퀄리티를 보충해서 '완벽의 함정'에서 탈출할 수 있었다. 개발은 아니지만 '애자일'과 관련 있다고 생각한다. 자신감을 얻어 종종 사용할 것 같다. 마치며이번 주 가졌던 생각을 허심탄회하게 풀어내니 시원섭섭하다. 워밍업 클럽과 함께 벌써 보냈을 뿐인데 올해도 60일정도 남았다. 마지막 남은 진짜 진짜 최종 일정 '수료식'까지 잘 마치면 좋겠다. 1기와 2기를 보낸 러너의 후기는 '장태근블로그'에거 계속된다. 인프런 워밍업 클럽 스터디 - BE 클린 코드 & 테스트 과정
백엔드
・
인프런워밍업클럽
2024. 10. 20.
1
[인프런 워밍업 스터디 클럽] 2기 - 세 번째 발자국
드디어 테스트 과정이 시작됐다. 3주 차, 무엇을 고민했을까? 강의테스트 강의를 들으며 집중했던 부분은 '어떻게 사용할까?'에 대해 고민했다.과정은 Java & Spring으로 과정이 진행된다. 하지만 현재 나의 환경(다른 언어, 프레임워크)에서고민하면 좋을 것 같은 내용 위주로 정리했다.예) 어떻게 데이터베이스에 데이터를 미리 넣어둘 수 있을까? (seed) 미션코드를 작성하는 마지막 미션, Day 12가 주어졌다. 단위 테스트를 작성하며 혼돈에 빠졌다.'간단하지 않을까?'로 내심 생각했던 부분들이 전부 어려웠다. 특히 '어떤 부분을 테스트해야 할까?' 가려내는 작업이 어려웠다. 덜어냄의 미학그럼에도, 문제를 해결하기 위해 고민했다. 요구사항이 '목표'라고 생각하고 목표를 달성하기 위해 필요한 메서드를 선별했다. 무엇을 추가해야 할까, 보다 무엇을 덜어내야 할까에 집중한 것 같다. 예외 케이스를 신경 쓰지 못해서 아쉽다. 마치며앞서 강의에서 언급했던 것처럼, 추가 사고과정을 거치니 이전보다 복잡했다. 하지만 혼돈, 고난을 극복할 때 재미도 함께 느꼈다.시간 정말 빠르다. 한 주 남았다. 끝까지 정신 줄 부여잡고 함께 이겨내면 좋겠다. 인프런 워밍업 클럽 스터디 - BE 클린 코드 & 테스트 과정
백엔드
・
인프런워밍업클럽
2024. 10. 13.
1
[인프런 워밍업 스터디 클럽] 2기 - 두 번째 발자국
시간 가는 줄 모른다. 벌써 워밍업 클럽 2주 차가 끝났다. 강의지난주에 개념을 잡았다면, 이번 주는 실습이 많았다. 2가지를 중점으로 들었다.어떻게 활용할 수 있을까?사고를 어떻게 하실까?실습을 하다 보니, 부족한 점을 많이 느꼈다. 객체지향이 부족하다고 느꼈는데 역시 맞았다. 개념도 중요하지만 어떻게 사용해야 할지 이어지지 않았다. 잠시 풀이 죽었다. 그런데 다시 생각해 보니 기회였다.'섹션 7. 리팩토링 연습'이 가장 인상 깊다. 준비한 개념을 전부 활용하는 섹션이었다. 섹션 7을 막힘없이 설명할 수 있다면 강의를 제대로 수강했다고 생각한다. 섹션 7에 계시는 우빈 님께 여러 번 인사드릴 예정이다. 늘 그랬듯, 해결할 것이다. 미션미션 1개였지만 어려웠다. '막막하다'라는 표현이 적절하다. 도저히 '객체지향'에 다가갈 수 없었다. 다른 분의 방식을 참고해서 미션을 해결할 수 있었다. 하지만 '내가 무엇을 모르고 부족한가?'를 알아보기 위해서는 알고 있는 부분에서 최선으로 해결했다.만족스럽지 않았다. 아쉬웠다. 문제에 부딪혔을 때 지식 공유자 님을 추상화하고 다가가려고 시도하는 편이다. '섹션 8. 기억하면 좋은 조언들'에 도움을 많이 받았다. 우빈 님께서 어떻게 사고에 다가갈 수 있는지 상세하게 이야기해 주셔서 힘을 얻었다. 지금도 재밌는데, '의도를 전달할 수 있다면 얼마나 재밌을까?'라는 생각이 들었다. 적용하기 어려웠던 부분을 반복해서 체득시킬 생각이다. 마치며클린 코드 과정이 끝났다. 중간 점검에서 우빈 님께서 하신 말씀이 기억에 남았다."강의에 전하고 싶은 내용을 모두 담았습니다"앞으로 이어지는 테스트에서도 어떻게 실천하고 계신지 함께 지켜보며 들을 생각이다. 절반 왔다. 강의에서 끝나지 않고 연습이 중요하다고 느꼈다. 3주 차도 무리 없이 헤쳐나갔으면 좋겠다. 인프런 워밍업 클럽 스터디 - BE 클린 코드 & 테스트 과정
백엔드
・
인프런워밍업클럽
2024. 10. 06.
1
[인프런 워밍업 스터디 클럽] 2기 - 첫 번째 발자국
드디어 인프런 워밍업 클럽 2기가 시작됐다. 사실, 수강 신청 전까지 끝까지 의심했다. 진짜 하고 싶은 일이 맞을까? 수강 신청이 열리는 순간부터 셔터 문 닫을 때까지, 약 2주 동안 고민하다 결국 신청했다. '시도하지 않으면 후회할꺼야'라는 마음의 소리를 이길 수 없었다. 강의수강 추상화를 주제로 이야기를 풀어간다. 추상화 덕분에 일상을 돌아봤다. 모든 것이 추상화다. 추상화되어있지 않은 사물이 바로 떠오르지 않는다. 발자국을 작성하도록 도와주는 노트북도 그렇다. 일정한 리듬에 맞춰 키보드를 두들기는데 글자가 모여 글이 된다. '추상화가 없다면 01001과 같은 숫자로 글을 작성하고 있지 않았을까?'라는 생각이 들었다. 추상화는 '친절'이라고 생각한다. 코드에 추상화를 더하는 전과정이 친절하지 않으면 불가능하다. 읽는 사람이 어떻게 조금 더 쉽게 읽을 수 있을까?를 고민하는 과정이 흥미롭다. 동작하는 코드 위에 의도를 전달하기 위해 친절을 베푼다. 코드, 글, 한편의 작품이 '쉽다'라는 이야기를 들으면 좋겠다. 한 순간에 가질 수 없다고 생각한다. 절반도 되지 않았지만, 객체 지향은 여러번 연습하지 않으면 익힐 수 없다는 느낌을 강하게 받았다. 체화되면 어떻게 코드가 보일지 기대된다. 미션객체 지향을 다루기 전, 미션은 비교적 간단했다. 아래 2가지를 중점으로 생각했다. 어떻게 해야 메시지를 전달할 수 있을까?미션의 의도가 무엇일까? 1기 백엔드 미션을 자주 돌아본다. 미션에서 나누고 싶은 이야기가 '자주 다루는 핵심'이라는 인상을 받았다. 과정이 3개월이 더 지났는데 배울 때마다 새롭다. 2기도 똑같은 출제자, 우빈 님의 의도가 무엇일지 생각했다. 도출한 결론은 '추상화'다. '만약 강의 내용을 주제로 대화를 나눠요'라는 미션이 주어졌을 때 추상화가 금지어라면 어떨까? 주어진 시간이 지옥이라고 느낄 것 같다. 다음 미션은 '객체 지향으로 추상화'를 어떻게 적용할 것인지 고민하는 시간을 가진다. 부족하다고 느꼈는데 잘됐다. 특히 다른 러너의 의견을 접하고 나누고 싶다. 자세한 내용은 블로그에 기록했다. 마치며어떤 행동을 시작할 때 항상 초심을 글로 작성한다. 작성한 글을 보며 '오늘 하루 최선이었나? 묻는다. 그런데 최선을 다하지 않았다. 왜 그랬을까? 시스템이 아니다. 4주라는 기간을 유지하려면 '리듬'이 중요하다고 생각한다. 그런데 자주 미뤘다. 난이도가 어렵다고 느껴지면 미뤘다. 숨을 고르는 건 좋다. 항상 전속력으로 달릴 수 없다. 하지만 학습을 이어가는 전환 속도가 느렸다. 그래도 어떻게든 계획된 진도를 마쳤다. 원하는 결과는 아니어서 아쉽지만 덕분에 다음 주 어떻게 지내야 할지 처절하게 느꼈다. 리듬을 찾자. 고통스럽다는 건, 적절한 난이도라는 증거다. 쉬우면 공부가 아니다. 고통을 극복했을 때 펼쳐지는 그림을 상상해 보자. 다음 주, 발자국에 어떻게 남길지 기대된다. 인프런 워밍업 클럽 스터디 - BE 클린 코드 & 테스트 과정
백엔드
・
인프런워밍업클럽
2024. 05. 19.
0
[인프런 워밍업 스터디 클럽] 1기 - 세 번째 발자국
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]3주 차는 이전까지 만들었던 애플리케이션을 배포하는 과정을 다뤘다. 무엇을 배웠나?11일 차: 기본적인 배포를 위한 준비- 배포란 무엇인가, 어떤 준비가 필요한가 - 스프링 서버 실행 시 설정을 코드 변경 없이 제어하는 방법 - Git, GitHub 차이, 기초적인 사용법 - AWS EC2란 무엇인가? 어떻게 사용하는가? 12일 차: AWS와 EC2 배포- EC2에 접속하는 방법과 리눅스 명령어 다루기 - 개발환경 구축 및 배포 - foreground, background의 차이 및 background 제어하기 - 도메인 이름 사용하기 13일 차: Spring Boot 설정, 버전업 이해하기 14일 차: 마무리 및 추가 꿀팁 영상 과제스프링 컨테이너와 계층화 아키텍처과일가게 API 구현하기 마무리지난주에는 걱정이 많았는데 이번주는 재밌게 보냈다. 과제를 구현하고 부족한 내용을 다시 보충하며 알아가는 과정에 시간이 사라졌다. 걱정이 많았는데 마무리가 즐겁게 끝나서 다행이다. 공식적인 스터디 일정은 이제 수료식만 남았다. 미니프로젝트를 계속 구현할지 혹은 또 다른 일정을 시작할지 생각해 봐야겠다.
백엔드
・
인프런워밍업클럽
2024. 05. 12.
0
[인프런 워밍업 스터디 클럽] 1기 - 두 번째 발자국
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]2주 차는 이론보다 실습이 많았다. 그리고 이전보다 조금 더 깊은 주제를 다뤘다. 한 번에 이해가 가지 않는 주제들도 많아서 여러 번 반복해서 보고 있다. 트랜잭션 스크립트패턴과 도메인 모델패턴을 사용해 봤던 게 가장 인상 깊었다. 무엇을 배웠나? 6일 차: 스프링 컨테이너의 의미와 사용 방법스프링 컨테이너- 서버가 시작되면 컨테이너가 생기고 스프링 빈이 들어간다. - 컨테이너는 무엇이고, 스프링 빈은 무엇일까? - 컨테이너는 클래스의 정보(스프링 빈)를 담고 있다. - 빈으로 등록된 클래스의 연관관계를 정리해 준다. - 스프링빈으로 등록될 때 인스턴스화를 진행한다. - 스프링빈은 두 가지의 타입을 가진다. 1. 의존성을 추가하여 등록되는 빈 2. 사용자가 직접 추가하는 빈 - 빈으로 등록되지 않은 클래스를 의존하려 할 때 컨테이너에 조회되지 않고 빈으로 등록하라고 에러가 발생한다. - 그렇다면 왜 스프링 컨테이너와, 빈을 사용해야 할까? `new` 키워드를 사용해서 직접 인스턴스화하면 되지 않을까?IoC, DI- 스프링 컨테이너를 이해하기 위해서는 3단 변화를 직접 느껴야 함 - class -> interface -> 스프링 컨테이너(IoC, DI) - IoC(제어의 역전)는 객체의 생성, 삭제등 관리를 내가 직접 하지 않고 프레임워크(컨테이너)에게 위임함 - DI(의존성 주입)는 의존성을 직접 주입하지 않고 컨테이너가 주입함 - 같은 타입의 빈이 등록되어 있을 때 컨테이너도 어떤 빈을 주입해야 하는지 교통정리를 해줄 수 없음, 이때는 사용자가 빈의 우선권을 등록해줘야 함(@Primary) - 결국 컨테이너를 사용하는 이유는 변화에 유연하게 대응하기 위해서임, 클래스를 사용하는 코드에는 변화를 주지 않고 변화가 필요한 구현코드에만 수정함빈을 어떻게 등록하고, 주입할까?- 컨테이너에 등록되는 빈을 등록하기 위해서는 `@Configuration`과 `@Bean`을 이해해야 함 - `@Configuration`은 클래스에 사용하고 `@Bean`은 메서드에 사용함 - 일반적으로 사용자가 직접 만든 클래스는 Controller, Service, Repository 어노테이션을 사용함. - 외부 라이브러리, 프레임워크에서 제공하는 클래스를 빈으로 등록할 때 두 어노테이션을 조합하여 사용함 - `@Component`는 컨트롤러, 서비스, 리포지토리 외에 추가 클래스를 스프링 빈으로 등록할 때 사용함 - 빈을 주입시키는 방법은 3가지가 있음(생성자, setter, 필드) - 생성자 주입이 가장 권장되는 방식임(불변, null 체크) - setter 주입은 setter 메서드를 열어둠으로써 누군가 사용하여 오염될 수 있음 - 필드 주입의 경우 `@Autowired`를 사용하는데 테스트 코드 작성시 어려움 - @Qualifier: 같은 타입의 빈을 구별하는데 사용함 - @Primary: 우선권을 지정할 때 사용 - @Qualifier 는 사용하는 쪽과 등록하는 쪽 모두에서 사용해 연결할 수 있음 - @Qualifier와 @Primary가 동시에 사용될 경우 Qualifier가 우선권을 가짐 - 스프링은 사용자가 직접 지정한 설정을 우선으로 함 7일 차: Spring Data JPA를 사용한 데이터베이스 조작문자열 SQL을 직접 사용할 때 문제점과 JPA- 문자열을 직접 사용하는 것은 실수(오탈자)가 발생할 확률이 높음. 에러가 컴파일 시점에 발견되지 않고 런타임 시점에 발견되는 치명적인 문제(운영 중 발견) - 프로그래밍 언어와 관계형 데이터베이스의 패러다임 불일치 - 반복적인 작업 발생(CRUD) - 변화에 유연한 프로그램 구현이 어려움: 특정 데이터베이스에 종속됨 - JPA(Java Persistence API)는 자바진영의 ORM 기술 표준을 의미함: 데이터를 영구적으로 보관하기 위한 규칙 - 영속성(Persistence)은 영구적인 속성 - 규칙(Interface)을 구현하기 위해 Hibernate(구현체)를 사용 - Hibernate는 내부적으로 JDBC를 사용함Entity Class 만들기- Entity는 관리되어야 할 데이터를 의미함 - 기존 클래스를 엔티티로 선언하기 위해서는 `@Entity`를 사용 - id를 기본키로 만들어 주기 위해서는 `@Id`를 사용 - `@GeneratedValue` 해서 기본키 생성전략을 제공해야 함 - JPA를 사용하기 위해서는 기본 생성자가 제공되어야 함 이때 `protected`로 선언 - `@Column`은 테이블과 매칭, 다양한 옵션을 선언할 수 있음. nullable, length, name... - JPA를 사용하기 위해서는 설정에 추가해야 함 - `ddl-auto`: 서버가 시작될 때 테이블을 어떻게 처리할 것인지를 정함 - `hibernate.show_sql`: 데이터베이스에 날리는 SQL을 보여줌 - `hibernate.format_sql`: 포맷팅 해서 보기 좋게 보여줌 - `hibernate.dialect`: SQL 방언을 JPA가 수정해 줌Spring Data JPA 사용하기- JPA를 편리하게 사용할 수 있도록 Spring에서는 Spring Data JPA를 지원함 - Spring Data JPA -> JPA -> Hibernate -> JDBC - save: 객체를 저장하거나 업데이트 - findAll: 일치하는 모든 데이터 조회 - findById: id를 기준으로 일치하는 데이터 1개 조회 - Spring Data JPA를 사용하면 다양한 쿼리를 조합할 수 있음 - find, findAll, count, 등등...8일 차: 트랜잭션과 영속성 컨텍스트- 트랜잭션이(Transaction)이란 더 이상 쪼갤 수 없는 업무의 최소단위를 의미함 - 트랜잭션을 시작하면 모두 성공(commit)하거나 되돌리기(rollback)할 수 있음 - 트랜잭션을 적용할 때 `@Transactional`을 사용함 - 영속성 컨텍스트가 핵심 9일 차: 조금 더 복잡한 기능을 API로 구성하기API 스펙을 설계하고 직접 구현하는 것을 권장 10일 차: 객체지향과 JPA 연관관계이전에 구현된 코드는 객체가 협력하지 않고 직접 객체를 가져다 쓰는 방식으로 작성되었음. 어떻게 하면 객체가 서로 협력하는 관계를 맺어줄 수 있을까? >  - 서비스에 작성된 비즈니스 로직을 도메인 계층으로 이동시킴 과제과일가게 API 구현하기클린코드 이해하기 마무리우려하던 일은 현실이 돼버렸다. 컨디션 관리에 실패했다. 궁금한 주제를 탐구하기도 하고 딴짓을 하다 늦게 잠들었다. 수면패턴이 꼬이고 생산성도 저하됐다. 결국 시간을 알차게 보내지 못했다. 과제를 해결하는데 급급하기도 했고, 진도표를 몰아서 듣기도 했다. 연쇄반응으로 걱정도 늘어났다. 불행 중 다행으로 긍정적인 사실도 찾을 수 있었다. 잠(루틴)의 중요성을 느꼈다. 푹 자고 일어나서 루틴을 다시 시작하니 금방 제모습으로 돌아왔다. 이외에도 다양한 주제를 탐구하다 보니 견문이 넓어졌다. 시간을 효율적으로 보내고 얼른 접하고 싶은 욕심이 든다.
백엔드
・
인프런워밍업클럽
2024. 05. 05.
0
[인프런 워밍업 스터디 클럽] 1기 - 첫 번째 발자국
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]1주 차가 끝이 났다. 고민을 많이 하고 시작한 스터디였는데 무엇을 알고, 모르는지 확인함에 도움을 받고 있다. 무엇을 배웠나?강의는 교과서 같았다. 각 강의와 섹션마다 학습목표와 정리가 이뤄진다. 반복되는 과정을 통해 점진적으로 문제가 해결되는 과정을 배웠다. 서버개발자가 되기 위한 최소한의 이론을 다루고 실습을 먼저 시작했다. 간단한 기능으로 시작했던 애플리케이션에 요구사항이 추가되고 어떻게 계층화 아키텍처로 나눌 수 있을지 이야기하는 시간을 가졌다. 1일 차: 서버 개발을 위한 환경 설정 및 네트워크 기초스프링 프로젝트를 시작하는 방법어떻게 새로운 프로젝트를 시작할까?기존에 운영 중인 프로젝트에 투입 됐을 때 어떻게 시작할 수 있을까? 서버 개발자가 되기 위해 알아야 하는 기본적인 지식네트워크, IP, 도메인, 포트, HTTP 요청과 응답, 클라이언트 - 서버, API란 무엇인가 과제: 자바 어노테이션무의식 중에 많이 사용했지만 궁금해하지 않았다. 이전에는 어떻게 문제를 해결했는지 알 수 있었다. 2일 차: 첫 HTTP API 개발Spring Boot를 사용해 API 만들기 GET, POST웹 개발에 기본이되는 HTTP를 다룬다.GET은 쿼리를 사용해 조회에 사용되고, POST는 body를 사용해 생성에 주로 사용된다. 과제: API 실습 1, 2일 차를 제대로 이해하고 있는지 점검을 했다. 문제를 해결하는 데 시간이 오래 걸리지 않았지만 정리하는데 오랜 시간이 걸렸다.3일 차: 기본적인 데이터베이스 사용법디스크와 메모리의 차이, 데이터베이스(Database)는 왜 필요한가?SQL 사용, MySQL 다루기이전에 만들었던 기능들은 서버가 종료되면 데이터가 모두 사라졌다. 데이터를 계속 저장하기 위해서 데이터베이스를 사용하자.테이블 생성, 데이터 추가, 조회, 수정, 삭제 과제: 익명 클래스와 람다 4일 차: 데이터베이스를 사용해 만드는 API스프링 서버와 연결하여 데이터베이스 다루기, API 예외상황 다루기, 예외처리PUT, DELETE를 학습하고 수정데이터베이스와 통신해서 조회되는 데이터가 없으면 어떻게 에러를 반환할지 배운다. 5일 차: 클린코드의 개념과 첫 리팩터링좋은 코드는 왜 중요한가? 계층화 아키텍처(Layered Architecture)의 등장, 리팩터링Controller에 역할을 덜어주기 위해 리팩터링을 진행했다.역할을 나누고 왜 좋은 코드의 개념에 대해 배웠다. 마무리스터디 시작 전에 강의를 듣고 정리해 둬서 다행이다. 주말을 앞두고 몸도 마음도 지쳐서 과제를 제출하지 못할 뻔했다. 문제가 발생했던 이유는 전 날 푹 잠들지 못해서 발생했다. 단거리가 아니라 장거리 달리기라 생각하고 컨디션 관리에 더욱 신경 써야겠다. 다음 주도 미루지 않고 마무리했으면 좋겠다.
백엔드
・
인프런워밍업클럽