📘 기초 지식
-
항상 데이터베이스를 다룰 때 JPA을 이용해서 다뤘는데 Mybatis를 이용해서 프로젝트를 진행해보고자 사용법에 대해서 공부하게 되었다. 데이터들이 프로그램이 종료되어도 사라지지 않고 어떤 곳에 저장되는 개념을 영속성(Persistence) 이라고 한다. 자바에서는 데이터의 영속성을 위한 JDBC를 지원해주는데, 이는 매핑 작업을 개발자가 일일히 수행해야 하는 번거로움이 있다. SQL Mapper와 ORM은 개발자가 직접 JDBC Programming을 하지 않도록 기능을 제공해주는 Persistence Framework 종류이다. 기존 JDBC 만의 사용으로 쿼리문을 만들어 요청하는 과정은 쿼리문이 조금만 길어져도 관리가 힘들고 번거롭다. 따라서 JPA와 MyBatis 라이브러리를 사용하여 문제를 해결..
Spring에서 Mybatis 사용하기항상 데이터베이스를 다룰 때 JPA을 이용해서 다뤘는데 Mybatis를 이용해서 프로젝트를 진행해보고자 사용법에 대해서 공부하게 되었다. 데이터들이 프로그램이 종료되어도 사라지지 않고 어떤 곳에 저장되는 개념을 영속성(Persistence) 이라고 한다. 자바에서는 데이터의 영속성을 위한 JDBC를 지원해주는데, 이는 매핑 작업을 개발자가 일일히 수행해야 하는 번거로움이 있다. SQL Mapper와 ORM은 개발자가 직접 JDBC Programming을 하지 않도록 기능을 제공해주는 Persistence Framework 종류이다. 기존 JDBC 만의 사용으로 쿼리문을 만들어 요청하는 과정은 쿼리문이 조금만 길어져도 관리가 힘들고 번거롭다. 따라서 JPA와 MyBatis 라이브러리를 사용하여 문제를 해결..
2023.06.14 -
현재까지 Springboot 2.x 만 사용을 해오다가 새로운 프로젝트를 하게 됐는데 팀원 분이 3.x를 사용해봤다고 하여 경험 삼아 사용해보기로 했다. 또 사용해보지 않았지만 최근 많이들 사용하는 기술을 사용해보자 했는데 그 중 하나가 swagger였다. swagger를 적용시켜보기 위해서 test 파일을 만들어 적용을 시켜보는데 역시나 많은 에러들을 만났다. 첫번째 시도 (실패) 먼저 해당 종속성을 추가하고 config와 controller를 작성했다. dependencies { implementation 'io.springfox:springfox-swagger2:3.0.0' implementation 'io.springfox:springfox-swagger-ui:3.0.0' } @Configurat..
Springboot 3.x에 Swagger 사용해보기현재까지 Springboot 2.x 만 사용을 해오다가 새로운 프로젝트를 하게 됐는데 팀원 분이 3.x를 사용해봤다고 하여 경험 삼아 사용해보기로 했다. 또 사용해보지 않았지만 최근 많이들 사용하는 기술을 사용해보자 했는데 그 중 하나가 swagger였다. swagger를 적용시켜보기 위해서 test 파일을 만들어 적용을 시켜보는데 역시나 많은 에러들을 만났다. 첫번째 시도 (실패) 먼저 해당 종속성을 추가하고 config와 controller를 작성했다. dependencies { implementation 'io.springfox:springfox-swagger2:3.0.0' implementation 'io.springfox:springfox-swagger-ui:3.0.0' } @Configurat..
2023.06.12 -
앞서 작성했던 DevOps에 이어서 CI/CD가 무엇인지 알아보자. Integration Hell(통합 지옥) 통합지옥은 전통적인 개발한 코드를 하나로 모아 빌드할 때의 어려움을 지옥에 빗대 표현한 말이다. 전통적인 개발 과정에서는 개발이 끝난 후 한꺼번에 통합을 하기 때문에 통합 과정이 몇 시간 또는 며칠이 걸리기도 한다. Continuous Integration(CI) 지속적 통합, 한번에 모아 통합하기는 어려우니 작은 단위로 코드를 자동으로 수시로 테스트하고 통합하자는 뜻이다. CI(지속적 통합)를 통해 개발자들은 코드 변경 사항을 공유 브랜치 또는 "트렁크"로 다시 병합하는 작업을 더욱 수월하게 수행할 수 있다. 개발자가 애플리케이션에 적용한 변경 사항이 병합되면 이러한 변경 사항이 애플리케이션을..
[DevOps]CI/CD란?앞서 작성했던 DevOps에 이어서 CI/CD가 무엇인지 알아보자. Integration Hell(통합 지옥) 통합지옥은 전통적인 개발한 코드를 하나로 모아 빌드할 때의 어려움을 지옥에 빗대 표현한 말이다. 전통적인 개발 과정에서는 개발이 끝난 후 한꺼번에 통합을 하기 때문에 통합 과정이 몇 시간 또는 며칠이 걸리기도 한다. Continuous Integration(CI) 지속적 통합, 한번에 모아 통합하기는 어려우니 작은 단위로 코드를 자동으로 수시로 테스트하고 통합하자는 뜻이다. CI(지속적 통합)를 통해 개발자들은 코드 변경 사항을 공유 브랜치 또는 "트렁크"로 다시 병합하는 작업을 더욱 수월하게 수행할 수 있다. 개발자가 애플리케이션에 적용한 변경 사항이 병합되면 이러한 변경 사항이 애플리케이션을..
2023.05.18 -
DevOps란? Development + Operation 개발담당자와 운영담당자가 연계하여 협력하는 개발 방법론이다. 데브옵스는 개발과 운영을 결합해 탄생한 개발 방법론이다. 시스템 개발자와 운영을 담당하는 정보기술 전문가 사이의 소통, 협업, 통합 및 자동화를 강조하는 소프트웨어 개발 방법론이다. 이러한 데브옵스의 개념은 애자일 소프트웨어(Agile software) 개발과 지속적인 통합(Continuous integration) 등의 개념과도 관련이 있다. 애자일 소프트웨어 개발 계획과 문서를 기반으로 개발 모형이나 모델에 따라 앞을 예측하며 개발하는 것이 아니라, 실질적인 코딩을 기반으로 일정한 주기에 따라 계속적으로 프로토타입을 형성하고 필요한 요구사항을 파악하며 이에 따라 즉시 수정사항을 적용..
데브옵스(DevOps)란?DevOps란? Development + Operation 개발담당자와 운영담당자가 연계하여 협력하는 개발 방법론이다. 데브옵스는 개발과 운영을 결합해 탄생한 개발 방법론이다. 시스템 개발자와 운영을 담당하는 정보기술 전문가 사이의 소통, 협업, 통합 및 자동화를 강조하는 소프트웨어 개발 방법론이다. 이러한 데브옵스의 개념은 애자일 소프트웨어(Agile software) 개발과 지속적인 통합(Continuous integration) 등의 개념과도 관련이 있다. 애자일 소프트웨어 개발 계획과 문서를 기반으로 개발 모형이나 모델에 따라 앞을 예측하며 개발하는 것이 아니라, 실질적인 코딩을 기반으로 일정한 주기에 따라 계속적으로 프로토타입을 형성하고 필요한 요구사항을 파악하며 이에 따라 즉시 수정사항을 적용..
2023.05.18 -
객체를 생성하기 위해서는 생성자 패턴, 정적 메서드 패턴, 수정자 패턴, 빌더 패턴 등을 사용할 수 있다. 프로젝트를 진행하던 중에 팀원에게 빌더패턴을 사용하는게 가장 좋다는 얘기를 들었었는데 당장 프로젝트를 완료하는 것이 급했기 때문에 사용해보지 않았던 빌더 패턴을 사용하기 어려워서 다른 방법을 사용했었는데 이번에 빌더 패턴에 대해서 알아보고자 포스팅하기로 했다. Builder 패턴이란? 복합 객체의 생서 과저이과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴이다. 생성자 인자로 너무 많은 인자가 너겨지는 경우 어떠한 인자가 어떤 값을 나타내는지 확인하기 힘들다. 또 어떤 인스턴스의 경우에는 특정 인자만으로 생성해야 하는 경우가 발생한다. 특정 인자에 해당하..
[Java] 빌더 패턴(Builder Pattern)이란?객체를 생성하기 위해서는 생성자 패턴, 정적 메서드 패턴, 수정자 패턴, 빌더 패턴 등을 사용할 수 있다. 프로젝트를 진행하던 중에 팀원에게 빌더패턴을 사용하는게 가장 좋다는 얘기를 들었었는데 당장 프로젝트를 완료하는 것이 급했기 때문에 사용해보지 않았던 빌더 패턴을 사용하기 어려워서 다른 방법을 사용했었는데 이번에 빌더 패턴에 대해서 알아보고자 포스팅하기로 했다. Builder 패턴이란? 복합 객체의 생서 과저이과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴이다. 생성자 인자로 너무 많은 인자가 너겨지는 경우 어떠한 인자가 어떤 값을 나타내는지 확인하기 힘들다. 또 어떤 인스턴스의 경우에는 특정 인자만으로 생성해야 하는 경우가 발생한다. 특정 인자에 해당하..
2023.05.17 -
수도코드 1. 1초마다 documents에서 printlist로 값을 추가, 이동, 출력 2. buffersize만큼 옆으로 이동 3. 옆으로 이동할 때 docunets의 다른 요소와 이미 추가된 요소의 합이 capacities를 넘지 않으면 추가 4. 넘으면 이동만 5. documents와 printlist가 모두 비면 시간 리턴 import java.util.*; public class Solution { public int queuePrinter(int bufferSize, int capacities, int[] documents) { int second = 0; Queue printlist = new LinkedList(); for(int i = 0; i < bufferSize; i++) { pr..
[알고리즘 풀이] 프린터수도코드 1. 1초마다 documents에서 printlist로 값을 추가, 이동, 출력 2. buffersize만큼 옆으로 이동 3. 옆으로 이동할 때 docunets의 다른 요소와 이미 추가된 요소의 합이 capacities를 넘지 않으면 추가 4. 넘으면 이동만 5. documents와 printlist가 모두 비면 시간 리턴 import java.util.*; public class Solution { public int queuePrinter(int bufferSize, int capacities, int[] documents) { int second = 0; Queue printlist = new LinkedList(); for(int i = 0; i < bufferSize; i++) { pr..
2023.05.04 -
TDD란? TDD란 Test Driven Development의 약자로 '테스트 주도 개발'이라고 한다. 반복 테스트를 이용한 소프트웨어 방법론으로 작은 단위의 테스트 케이스를 작성하고 이를 통과하는 코드를 추가하는 단계를 반복하여 구현한다. 짧은 개발 주기의 반복에 의존하는 개발 프로세스이며 애자일 방법론 중 하나인 eXtream Programming(XP)의 'Test-First' 개념에 기반을 둔 단순한 설계를 중요시한다. eXtream Programming란? 미래에 대한 예측을 최대한 하지 않고 지속적으로 프로토타입을 완성하는 애자일 기방법론 중 하나 이 방법론은 추가 요구사항이 생기더라도 실시간으로 반영할 수 있다. 단위 테스트(Unit Test)란? 말 그대로 한 단위(일반적으로 Class)..
TDD(테스트 주도 개발)란?TDD란? TDD란 Test Driven Development의 약자로 '테스트 주도 개발'이라고 한다. 반복 테스트를 이용한 소프트웨어 방법론으로 작은 단위의 테스트 케이스를 작성하고 이를 통과하는 코드를 추가하는 단계를 반복하여 구현한다. 짧은 개발 주기의 반복에 의존하는 개발 프로세스이며 애자일 방법론 중 하나인 eXtream Programming(XP)의 'Test-First' 개념에 기반을 둔 단순한 설계를 중요시한다. eXtream Programming란? 미래에 대한 예측을 최대한 하지 않고 지속적으로 프로토타입을 완성하는 애자일 기방법론 중 하나 이 방법론은 추가 요구사항이 생기더라도 실시간으로 반영할 수 있다. 단위 테스트(Unit Test)란? 말 그대로 한 단위(일반적으로 Class)..
2023.05.03 -
수도 코드 1. 배열을 담을 queue와 첫사람, result, count를 int 타입으로 선언 2. queue가 빌 때까지 queue에서 숫자를 하나씩 꺼내서 다음 숫자와 비교 2.1. 이전 숫자가 다음 숫자보다 작으면 종료 2.2. 이전 숫자가 다음 숫자보다 크면 첫사람에 다음사람을 할당하고 count 1 증가하고 result에 count와 result중 큰 값을 할당 3. 위를 반복해서 가장 큰 result를 리턴 import java.util.*; public class Solution { public int paveBox(Integer[] boxes) { Queue queue = new LinkedList(Arrays.asList(boxes)); //첫 사람 선언, 할당 Integer firs..
[알고리즘 풀이] 박스 포장수도 코드 1. 배열을 담을 queue와 첫사람, result, count를 int 타입으로 선언 2. queue가 빌 때까지 queue에서 숫자를 하나씩 꺼내서 다음 숫자와 비교 2.1. 이전 숫자가 다음 숫자보다 작으면 종료 2.2. 이전 숫자가 다음 숫자보다 크면 첫사람에 다음사람을 할당하고 count 1 증가하고 result에 count와 result중 큰 값을 할당 3. 위를 반복해서 가장 큰 result를 리턴 import java.util.*; public class Solution { public int paveBox(Integer[] boxes) { Queue queue = new LinkedList(Arrays.asList(boxes)); //첫 사람 선언, 할당 Integer firs..
2023.05.02