코드스테이츠_국비교육/[Section3] 40

60_[Section 3] 회고_22.11.16

>갑분일기 회고 한 섹션에 한 달정도. 그렇게 벌써 3개의 섹션이 끝났다. 정말 이거 배우고 저거 배우다보니 한 달이 훅 지나갔다. 물론 다 소화하려면 조금 더 시간이 필요하겠지만, 그래도 섹션 3은 정말 알찼다고 생각한다. 가장 크게 느낀것은 프로그래밍 언어가 중요한 게 아니라 기술이 중요하다는 것이다. 나는 비전공자로 개발자의 길을 걷기로 결심하면서 무슨 언어를 배워야할지 이런 저런 자료를 많이 찾아봤다. '자바를 공부해볼까, 아니야 자바스크립트? 아니면 C를 해볼까...' 등등 그저 어떤 언어를 공부해야하나 고민을 많이 했다. 나처럼 비전공자로 시작했고, 유튜브나 온라인에 공개된 기타 학습자료로 시작한 사람들을 아마 대부분 나와 비슷하게 생각할거라고 생각한다. 근데 크게 의미있는 고민은 아니라는 점..

59.04_[Spring MVC] Spring 애플리케이션_실습_22.11.15

>실습 내용 Spring Boot Application(JPA)와 MySQL 을 연동하여 사용하기. >구현 내용 1. build.gradle 에 MySQL Connector Java 의존성 라이브러리 추가. 2. -server.yml 파일 설정 - spring:datasource:driver-class-name/url/username/password - ddl-auto: create-drop 등등 //MySQL 의 user 는 root 로 사용함. >문제 상황 ddl-auto: create-drop 옵션이 적용이 안된다고 파악됨. >문제 구체 상황 1. create 옵션은 기존 database(schema)에 존재하는 테이블을 drop하고 새로 create하는 옵션이다. 2. create-drop 옵션은..

59.03_[Spring MVC] Spring 애플리케이션_배포_22.11.15

배포 >전통적인 배포 방식 : scp, sftp 와 같은 표준 유닉스 툴 이용하기. : Spring Boot 기반의 Executable Jar 파일을 서버로 전송하여 실행. : JVM 이 설치된 환경이라면 서버에 전송된 Jar 파일을 실행할 수 있다. >클라우드 서비스를 위한 배포 방식 : Executable Jar 파일은 특히 클라우드 환경에서 배포하기 쉽다. : 클라우드 서비스 종류(PaaS, IaaS)에 따라 제공되는 툴이 다르다. 각각의 툴에 맞는 배포 방법이 있다. >PaaS(Platform as a Service) : Cloud Foundry에서 제공하는 cf command line 툴 이용. >IaaS(Infrastructure as a Service) : AWS Elastic Beansta..

59.02_[Spring MVC] Spring 애플리케이션_실행_22.11.15

실행 >Jar(Executable Jar)파일을 이용한 애플리케이션 실행 //Git Bash 기준 1. Jar 파일이 있는 디렉토리 경로에서 CLI 콘솔 오픈 2. 명령어 입력 java -jar (Jar 파일명 .jar) 3. 애플리케이션 실행 종료하기 Ctrl + c //`짧은 메모` git bash 단축키 참고 프로파일 적용 >프로파일(Profile) 기능 : 로컬 환경에서는 어떤 DB를 사용하고, 서버 환경에서는 어떤 DB를 사용할 지와 같이, 여러 설정을 만들어 놓고 그 중 특정 설정을 지정하는 기능 : Spring 에서 제공하는 기능 >.yml 파일 : 프로젝트 디렉토리 경로 중 `resources/`에 존재하는 yml 파일에서 프로파일을 설정해둘 수 있다. : 공통 적용 사항, 로컬 환경 적용..

59.01_[Spring MVC] Spring 애플리케이션_빌드_22.11.15

빌드 1. IDE 빌드 >IDE(IntelliJ)를 이용한 빌드 : Spring Boot에서 Gradle 툴을 이용하여 애플리케이션 빌드할 수 있는 플러그인을 지원함. : 때문에 Gradle Task 명령으로 쉽게 빌드가능 >IDE를 이용한 빌드 방법 Gradle -> build(tasks) - :build or :bootJar //Gradle : 우측 상단 카테고리, Notifications 과 같이 있음. >IDE를 이용한 빌드 결과물(디렉토리 경로) build -> libs -> .jar 파일 >.jar 파일 : 로컬 PC 에서 실행 가능한 애플리케이션 실행 파일 >:build task 와 :bootJar task 차이 -:build task : Gradle에서 빌드와 관련된 모든 task를 실행함..

58.01_[Spring MVC] API 문서화_Spring Rest Docs 설정_22.11.14

>Spring Rest Docs 설정(build.gradle) plugins { id 'org.springframework.boot' version '2.7.1' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id "org.asciidoctor.jvm.convert" version "3.3.2" // (1) id 'java' } repositories { mavenCentral() } // (2) ext { set('snippetsDir', file("build/generated-snippets")) } // (3) configurations { asciidoctorExtensions } dependencies { // (4) testImp..

57.02_[Spring MVC] API 문서화_ Spring Rest Doc_22.11.11

>Spring Rest Docs : Spring Rest Docs는 REST API 문서를 자동으로 생성해 주는 Spring 하위 프로젝트 : Controller(API 계층)의 슬라이스 테스트를 작성하고, 테스트가 통과되어야 API 문서가 만들어지는 것이 특징. >Spring Rest Docs의 API 문서 생성 흐름 1. 테스트 코드 작성 1.1. 슬라이스 테스트 코드 작성 1.2. API 스펙 정보 코드 작성(문서화 코드) 2. Test Task 실행 : Gradle의 build task 실행(Gradle - build) 3. API 문서 스니핏 생성(.adoc 파일) : 문서의 일부 혹은 조각을 의미하는 snippet(스니핏)을 생성함. : 각각의 스니핏은 각각의 테스트 케이스와 일대일 매칭됨. ..

57.01_[Spring MVC] API 문서화_ API 문서화_22.11.11

>API 문서화 : 해당 애플리케이션의 API를 사용할 방법을 문서로 만든것. : 물론 수기로도 가능하지만 너무나도 비용이 많이 들고 오차 가능성 때문에 권하지는 않음. : 때문에 Java 에서 사용할 수 있는 자동 API 문서화 툴이 존재하고, 대표적으로 Spring Rest Docs, Swagger이 있음. >API 문서화 방식 종류 -Swagger : 다양한 애너테이션을 붙이며 해당 부분이 어떻게 문서화될지를 표현한다. : 문서화시킬 부분에 애너테이션을 붙이면 되는 것이라서 따로 테스트를 할 필요가 없다. (테스트 케이스를 작성하기 싫어하는 개발자에게 추천) : 그리고 Postman처럼 API 요청 툴로써 기능할 수 있는 장점이 있다. : 하지만 코드에 애너테이션이 과하게 붙기 때문에 오히려 개발자..

56.03_[Spring MVC] 테스팅(Testing)_TDD_22.11.10

>TDD(Test Driven Development) : 테스트 주도 개발 : 선 테스트 후 구현을 하는 방식 >TDD 방식 구현 1. 계획 의도에 맞는 테스트를 구현한다. 하지만 계획된 의도 중 세부 사항들을 제외하고 입력값을 넣었을때 출력값이 나온다 정도의 구현을 한다. 구현함에 있어 사용할 클래스나 메서드가 없어도 그냥 작성한다. 2. 사용했던 존재하지 않는 클래스와 메서드를 만들어준다. 컴파일 에러를 만들어내는 부분, 즉 없는 클래스나 메서드를 사용한 부분의 에러를 없애준다. 3. 새로운 테스트를 복사하고, 복사한 테스트를 계획된 의도 중 세부 사항들에 통과하지 못하게 구현한다. 4. 테스트가 통과하지 못하는 범위를 큰 범위부터 작은 범위로 줄여나가며 세부적으로 구현한다. >TDD 방식 구현 요약..

56.02_[Spring MVC] 테스팅(Testing)_실습 페어 및 궁금증_22.11.10

API 계층 서비스 계층 데이터액세스 계층 각각에 붙이는 애너테이션의 차이 명확히 설명 >mapper의 매핑도 모킹해야하는가? 관점에 따라 다르다. mapper를 테스팅 범위에 포함하고 싶다면, 모킹을 안하면 된다. 모킹을 안하면 mapper가 잘 되는지도 테스팅이 된다. mapper의 로직을 모킹한다면, 테스팅이 되지 않는다. 굳이 매핑까지 테스팅할 필요가 없다고 생각하면 mapper 로직도 모킹하면 된다. 후자가 좀 더 이론적으로는 완전한 테스팅이라고 생각같긴하다. >Executable >assertThrows >given( ) 로직의 의미 : 가짜 객체을 이용해서 로직을 사용하겠다는 의미 >API 계층과 서비스 계층이 차이나는 이유 : API 계층은 Spring Boot으로 만들어야하지만 서비스 계..