전체 글 280

For vs Stream

Java 1부터 지원public static void main(String[] args) { List list = List.of(1, 2, 3, 4, 5); for (int i = 0;i Java 5부터 지원 가독성이 좋고 OutOfIndex error에 안정적이다..class파일로 될 때 전통적인 for문으로 변경된다. public static void main(String[] args) { List list = List.of(1, 2, 3, 4, 5); for (Integer i : list) { System.out.println(list.get(i)); }}Java 8부터 지원Stream 생성 -> 중간 연산 -> 최종 연산 public static void main(Stri..

자바 2024.06.23

Intellij에서 HTTP 요청 보내기

개요프로젝트 개발을 하던 중 Get 요청은 브라우저에서 실행이 가능하지만 Post 요청은 불가능하다 Post요청을 할 수 있는 방법 중 Intellij에서 요청하는 방법을 알아보자   방법프로젝트의 최 상단 디렉터리에 http 폴더를 만들어 주고 그 아래 .http 파일을 만들어 주자  각 요청은 ### 으로 구분해서 사용할 수 있다.요청 예시### 주문 신규 생성POST localhost:8080/api/v1/orders/newContent-Type: application/json{ "productNumbers": [ "001", "002" ]} 실행 버튼을 누르면 요청이 전송된다.응답도 Service 탭에서 받을 수 있다. POST http://localhost:8080/api/v1/o..

TestCode 2024.06.22

@AfterEach

개요테스트 코드를 작성 중 개별 테스트에 대해선 통과를 했는데 테스트를 여러 개를 같이 돌리게 된다면 테스트가 실패하는 경우가 발생했다. 이유를 알아보자.      테스트 설명본 프로젝트는 Cafe Kiosk를 구현하는 프로젝트로 주문을 생성하기 위해 상품을 데이터베이스에 등록을 한 후 주문번호 리스트를 받아 주분을 생성하는 테스트이다.2개의 테스트에서 각각 상품을 만들어 데이터베이스에 save 해주었다.    테스트 실패 테스트를 개별로 실행했을 땐 두 개의 테스트 모두 성공을 했다.하지만 두 개의 테스트를 동시에 실행하면 하나의 테스트에서 아래와 같은 에러를 발생하고 실패하는 경우가 발생했다. java.lang.IllegalStateException: Duplicate key 001 (attempte..

TestCode 2024.06.22

@NoargsConstructor(AccessLevel.PROTECTED)

개요JPA의 Entity에 @NoargsConstructor(AccessLevel.PROTECTED)를 적용시키는 이유에 대해 궁금해 공부해 봤다.JPA는 기본적으로 기본생성자(파라미터가 없는)가 필요하다. (Reflection글 참조)근데 옵션으로 PROTECTED를 사용하는 이유에 대해 알아보자.  본문Private로 설정하면 JPA에서 연관관계로 로딩 시 프록시 객체를 생성할 때 이용하지 못하므로 private는 사용하면 안 된다.대안으로 Protected를 사용하므로 써 무분별한 객체 생성을 막을 수 있다.

JPA 2024.06.19

스프링부트 실행 시 .sql로 데이터 insert하기

개요 프로젝트를 진행하면서 개발할 때 ddl-auto create 옵션을 사용할 때 테이블 데이터가 된다. 데이터베이스에 데이터를 매번 Postman으로 데이터를 입력하는 대신, data.sql 파일을 생성하여 서버가 실행될 때 데이터베이스에 자동으로 SQL이 실행되도록 설정했다.   방법 1. 프로젝트의 resources폴더에 data.sql 파일을 생성한다.2. data.sql 폴더 속 실행할 sql을 작성한다.insert into product(product_number, type, selling_status, name, price)values ('001', 'HANDMADE', 'SELLING', '아메리카노', 4000), ('002', 'HANDMADE', 'SELLING', '카페..

TestCode 2024.06.19

DNS란

DNSDomain Name System의 약자네트워크 통신을 위한 IP 주소와 문자 주소인 도메인 간 매핑하여 연결하는 서비스이다. DNS 서버 종류도메인 구조는 루트, 탑 레벨, 세컨드 레벨, 서브 도메인으로 구분된다.영역별 도메인을 관리하는 주체를 분리하기 위함이다. 도메인은 DNS 네임 서버로 관리하는데, 이때 도메인 영역별로 DNS 네임 서버를 분리해서 관리한다.루트 네임 서버루트 도메인을 관리하는 DNS 서버DNS 요청에 대해 TLD에 해당하는 네임 서버 정보를 응답한다.TLD 네임 서버도메인 이름의 최상위 영역인 TLD를 관리하는 DNS 서버TLD 영역에서 식별되는 모든 SLD를 관리하여 DNS 요청에 대해 SLD 네임 서버 정보를 응답한다.SLD 네임 서버실질적인 도메인 이름을 관리하는 DN..

카테고리 없음 2024.06.11

AWS DB 서비스

Amazon RDS클라우드 환경에서 관계형 DB를 간편하게 설정하고 운영할 수 있는 서비스다양한 DB 인스턴스 유형을 지원한다Aurora, PostgreSQL, MySQL, MariaDB, ORACLE...시스템의 가용성 및 확장성을 확보하기 위해 간편한 복제 기능을 제공한다. Multi-AZ 복제 방식Active-Standby 형태로 동작Primary DB가 Active 상태이며 Standby Replica가 대기상태로 동작한다.활성 DB에 장애 발생 시, Standby Replica가 Primary DB로 승격하여서비스를 지속한다. Active-Standby 인스턴스 간 데이터 정합성 유지가 중요하다.PrimaryDB상의 데이터에 변화가 발생하면 해당 데이터의 복사본을 전달하여 두 인스 턴스 간 동기..

AWS 2024.06.11

AWS 스토리지 서비스

AWS 스토리지서비스 종류는   블록 스토리지, 파일 스토리지, 객체 스토리지로 분류할 수 있다.블록 스토리지 Amazon EBS단일 스토리지 볼륨을 블록이라는 개별 단위로 분할해서 저장한다.각 블록은 저장된 위치에 고유한 주소가 부여되며, 서버에서 파일을 요청하면 블록들을 재구성하여 하나의 데이터로 서버에 전달한다.  블록 스토리지는 SAN(Storage Atrea Network)또는 가상 머신의 디스크로 사용된다.호스트에서 직접 파일을 액세스하고 기록하며 빠른 성능을 요하는 경우에 사용 ( 고성능이 요구되는 데이터베이스와 트랜잭션 워크로드)EBS 스토리지는 AWS 관리 콘솔에서 필요한 용량/성능에 맞추어 볼륨을 생성한 후, EC2인스턴스에 연결하여 사용한다. 인스턴스와 EBS 볼륨은 서로 독립적이다...

AWS 2024.06.11

DisplayName 작성하기

개요테스트 코드를 작성하다 보면 @DisplayName 등 테스트의 이름을 설정해야 무슨 테스트인지 파악하기 쉽다.테스트 이름을 이해하기 쉽게 작성하는 팁을 정리해 보자 명사의 나열보다 문장으로 작성하기음료 1개 추가 테스트 보다는음료를 1개 추가하면 주문 목록에 담긴다. 로 작성즉 A이면 B이다 또는 A이면 B가 아니고 C다로 작성하자 도메인 용어를 사용하여 한층 추상화된 내용을 담기특정 시간 이전에 주문을 생성하면 실패한다.영업 시작 시간 이전에는 주문을 생성할 수 없다.로 작성하자  테스트 현상을 중점으로 기술하지 말자 위에선 실패한다 등의 테스트 현상이 있다. 메서드 자체의 관점보다 도메인 정책 관점으로 작성하자.

카테고리 없음 2024.06.09

Record란

불변 객체불변 객체는 생성된 후 그 상태를 변경할 수 없는 객체를 의미한다.프로젝트를 진행하다 보면 데이터베이스 결과, 쿼리 결과 등 단순히 담기 위한 객체를 생성하는 경우가 있다.불변 객체를 사용함으로써 내부 필드값의 불변성을 보장해서 유지보수에서 이점을 챙길 수 있기 때문이다. Java에서 불변 객체java에서 불변 객체를 만들려면 아래와 같은 과정이 필요하다.private final로 선언을 해주어야 한다. 해당 객체를 만들기 위한 생성자도 만들어야 한다. 객체의 동등성을 위해 equals와 hashCode를 구현해야 한다. 필드에 접근하기 위한 getter를 정의해야 한다.디버깅을 위한 toString를 정의해야 한다. public class User { private final String..

자바 2024.06.07