분류 전체보기 212

Spring 테스트 코드 적용하기(JUnit, TDD)

TDD란? 테스트 주도 개발 테스트를 먼저 설계 및 구축 후 테스트를 통과할 수 있는 코드를 짜는 것 애자일 개발 방식 중 하나 - 코드 설계시 원하는 단계 목표에 대해 설정하여, 프로그램 결정 방향의 갭을 줄임 - 최초 목표에 맞춘 테스트를 구축하여 그에 맞게 코드를 설계하기 때문에 적은 의견 충돌 목적 - 코드의 안정성 - 기능 추가, 변경 과정에서 Side-Effect를 줄일 수 있다. - 코드 목적을 명확하게 표현 가능 JUnit이란? Java 진영의 대표적 Test Framework 단위 테스트를 위한 도구 제공 - 단위 테스트란? -코드의 특정 모듈이 의도된 대로 동작하는지 테스트하는 절차 -모든 함수와 메소드에 대한 각각의 테스트 케이스를 작성 F.I.R.S.T 원칙 - Fast: 테스트코드..

TIL / 2022-04-27 스프링

[한 것] 모아모아 사이드 프로젝트 아키텍처(요청 흐름도, 백엔드, CI/CD)그리기 모아모아 결산 API 리팩토링 스프링 테스트 강의 듣기 [배운 것] https://www.draw.io 를 통해서 아키텍처를 쉽게 그릴수 있음을 알게 되었음. 단위테스트랑 통합테스트의 차이를 알게 되었음. [모아모아 사용자 요청 흐름도] [백엔드 흐름도] [CI/CD] [느낀점] 스프링 프로젝트를 진행할 때, 테스트 코드를 작성하지 못한 것이 아쉽다.다음에는 애자일 프로세스를 지향하는 TDD 방식으로 진행하고 싶다. [할 것] 알고리즘 풀기 스터디 준비하기

💻 Backend/TIL 2022.04.28

TIL / 2022-04-26 시스템 아키텍처

[한 것] 모아모아 사이드 프로젝트 아키텍처 그리기 Bangu 토이 프로젝트 API 리팩토링 [배운 것] https://www.draw.io 를 통해서 아키텍처를 쉽게 그릴수 있음을 알게 되었음! [내가 설계한 Moamoa 프로젝트 아키텍처] [플로우 설명] 1. Local에서 frontend와 backend가 각각 develop 브랜치에 push를 하면, Github Actions가 자동 감지하여 Event trigger를 발생시킨다. 2. 이때, Github Actions에서 프론트엔드, 백엔드 파일을 자체 빌드하고, 압축파일 형태로 만든다. 3. 그리고 S3 bucket으로 zip 파일을 전송시키고, AWS IAM에서 권한 설정에 따라 CodeDeploy를 통해 zip 파일을 Amazon Ec2에 ..

💻 Backend/TIL 2022.04.26

TIL - 2022/04/25 - 배포 자동화(Github Actions CI/CD)

[한 것] 모아모아 사이드 프로젝트 Github Actions 이용해서 백엔드/프론트엔드 배포 자동화(CI/CD) [배운 것] CodeDeploy를 이용해서 zip 파일을 Ec2에 전송할때, 롤백을 위해 파일을 자동으로 삭제됨을 알게 되었음. 그래서 CodeDeploy를 할때, 프론트엔드, 백엔드 따로 배포그룹을 각각 1개씩 만들어서 배포하도록 하였음. 프론트엔드 쪽에서 CodeDeploy를 이용해서 ec2에 보낼 때, 자꾸 install 부분에서 timeout이 뜨는데, 이를 해결하기 위해서 배포그룹을 계속 만들어서 대략 2일동안 삽질을 했다. 한 EC2에 프론트엔드/백엔드 배포를 위한 CodeDeploy 애플리케이션을 따로 구축하였음. 전반적인 모아모아 프로젝트의 파이프라인 [느낀점] 기존에 프론트엔..

💻 Backend/TIL 2022.04.25

백준 2493번 - 탑 C++

[문제] https://www.acmicpc.net/problem/2493 2493번: 탑 첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1 www.acmicpc.net [유형] 스택 [코드] #include using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); int n; cin >> n; stack S; vector v; int index = 1; while(n--) { int t; cin >> t; if(index == 1) { S.push({t, index}); v.push..

부록 B - 자바 8 람다와 인터페이스 스펙 변화

B.1 람다가 도입된 이유 람다를 지원하기 위한 인터페이스를 함수형 인터페이스라고 한다. B.2 람다란 무엇인가? 람다란 한 마디로 코드 블록이다. 코드 블록인 람다를 메서드의 인자나 반환값으로 사용할 수 있게 된다. 코드 블록을 변수처럼 사용할 수 있다는 것 public class B003 { public static void main(String[] args) { Runnable r = () -> { System.out.println("Hello Lambda 3!!!"); }; r.run(); } } 람다의 구조 (인자 목록) -> { 로직 } B.3 함수형 인터페이스 추상 메서드를 하나만 가지는 인터페이스를 함수형 인터페이스라고 한다. B.4 메서드 호출 인자로 람다 사용 public class B..

부록 A - 스프링 MVC를 이용한 게시판 구축

A.1 URL과 @RequestMapping 연결하기 스프링 MVC에서는 @Controller 어노테이션이 붙은 클래스 안에 @RequestMapping 어노테이션이 붙은 메서드에서 클라이언트 요청을 처리하게 된다. 클라이언트가 URL을 입력하고 웹 서버에 서비스를 요청하면 서블릿 컨테이너가 해당 URL의 웹 컨텍스트를 찾고, 해당 웹 컨텍스트는 스프링 ApplicationContext에게 URL 중에 /를 처리할 수 있는 @RequestMapping(value = "/")를 가진 메서드에게 처리를 위임한다. @ResponseBody는 반환하는 문자열을 그대로 클라이언트, 즉 브라우저에게 전달하라는 뜻이다. A.4 서비스 구현 DAO는 데이터베이스 테이블당 하나를 만들게 된다. 대부분의 경우 하나의 서비..

백준 10807번 - 개수 세기 C++

[문제] https://www.acmicpc.net/problem/10807 10807번: 개수 세기 첫째 줄에 정수의 개수 N(1 ≤ N ≤ 100)이 주어진다. 둘째 줄에는 정수가 공백으로 구분되어져있다. 셋째 줄에는 찾으려고 하는 정수 v가 주어진다. 입력으로 주어지는 정수와 v는 -100보다 크거 www.acmicpc.net [코드] #include using namespace std; int arr[201]; int main() { ios::sync_with_stdio(0); cin.tie(0); int n,v; cin >> n; for(int i=1; i> t; arr[t+100]++; // 만약 t가 -100 -> 0, t가 0 -> 100, 100 -> 200 } cin >> v; cout

07 스프링 삼각형과 설정 정보

이 글은 스터디 내에서 스프링 입문을 위한 자바 객체 지향의 원리와 이해를 읽고 정리한 글입니다. IoC/DI - 제어의 역전/의존성 주입 프로그래밍에서 의존성이란? 전체가 부분에 의존한다는 것과 프로그래밍에서 의존 관계는 new로 표현된다. 스프링 없이 의존성 주입하기 1 - 생성자를 통한 의존성 주입 의존성 주입을 하면 확장성이 좋아짐 스프링 없이 의존성 주입하기 2 - 속성을 통한 의존성 주입 최근에는 속성을 통한 의존성 주입보다는 생성자를 통한 의존성 주입을 선호하는 사람이 많음 -> 프로그램에서는 한번 주입된 의존성을 계속 사용하는 경우가 더 일반적이기 때문 스프링을 통한 의존성 주입 - XML 파일 사용 속성을 통한 의존성 주입 ApplicationContext를 통해 스프링 컨텍스트 생성 c..