전체 글

백엔드 프로그래머를 준비하고 있는 대학생입니다 😜 Spring, Java, Git 공부 및 프로젝트 내용을 기록하고 있습니다! 함께 공부하시고 싶으신 분들은 댓글로 함께 소통해요! github : https://github.com/PgmJun
BackEnd/AWS

AWS 예상치 못한 과금 환불기 (with. 과금 방지법)

이 글은 AWS에서 예상치 못한 과금을 때려맞은 본인의 환불 기록을 담은 글이다. 나는 이런 글을 쓰게 될 줄 몰랐고, 평생 안 쓸 생각이었다. 그런데 인간은 생각보다 멍청했고, 나도 그러했다ㅋ.. 사건 수습 이후, 누구든 실수로 인해 AWS에서 과금폭탄을 맞은 경우 멘붕없이 이 글을 보며 차분히 대처할 수 있기를 바라는 마음에 기록으로 남겨보고자 글을 적게 되었다. 여행 중, 갑작스런 비용 결제 알림 💸 즐거운 제주도 가족 여행 마지막 날 새벽 6시 50분,,, 내 폰에 한 통의 결제 알림이 수신되었다. AWS로부터 결제 금액 75000원 가량이 빠져나가려다 잔액부족으로 실패했다는 알림이었다. 해당 계좌에는 다행히(?) 잔액을 만원만 입금해놓았기 때문에 돈이 출금되지는 않았고, 당황했지만 침착하게 원인..

부트캠프/우아한테크코스 6기

[DB] 트랜잭션(Transaction) 이란? (with. ACID)

트랜잭션 - 개념 이해데이터를 저장할 때 단순히 파일에 저장해도 되는데, 데이터베이스에 저장하는 이유는 무엇일까?여러가지 이유가 있지만, 가장 대표적인 이유는 바로 데이터베이스는 트랜잭션 이라는 개념을 지원하기 때문이다. 트랜잭션은 데이터베이스의 상태를 변화시키기 위한 하나의 작업 단위이며,단위 작업을 안전하게 처리하도록 보장해주는 역할을 한다. 그런데 하나의 작업을 안전하게 처리하려면 생각보다 고려해야 할 점이 많다. 예를 들어서 A의 5000원을 B에게 계좌이체한다고 생각해보자.A의 잔고를 5000원 감소하고, B의 잔고를 5000원 증가해야한다. ex) 5000원 계좌이체A의 잔고를 5000원 감소B의 잔고를 5000원 증가 계좌이체라는 거래는 이렇게 2가지 작업이 합쳐져서 하나의 작업처럼 동작해야..

부트캠프/우아한테크코스 6기

[Java] Java 반복 작업 수행 시, For-Loop와 Stream 사이 성능 비교

미션 도중 생긴 고민 💭 public Cars(List carNames) { ArrayList cars = new ArrayList(); for (String carName : carNames) { cars.add(new Car(carName)); } this.cars = cars; } Cars 객체를 생성할 때, List형태의 carNames를 입력받은 뒤, For-Loop 문을 통해 cars 필드를 초기화 해주었다. 하지만 For-Loop문을 생성자 로직에 적용하니 개인적으로 생성자 로직이 지저분하다는 생각이 들었다. 때문에 Stream을 사용하여 짧고 가독성있는 코드로 리팩토링하여 사용하고자 하였다. 그리고 이때 머릿속에 한가지 고민이 생겼다 🤔 미션의 요구사항에 자동차의 수는 제한이 없는데, 그럼..

부트캠프/우아한테크코스 6기

테스트를 위한 객체, 테스트 더블(Test Double)

🧐 Test Double이란?테스트 더블이란 실제 구현체로 테스트를 진행하기 어려운 경우, 이를 대신해서 테스트를 진행할 수 있도록 만들어지는 객체이다. Test Double 이란 명칭의 유래 💭영화를 촬영하는 경우, 위험한 장면 촬영할 때 실제 배우를 대신해서 촬영하는 스턴트 더블에서 유래된 단어이다. 사용 이유 💭이전에 '테스트 주도개발 시작하기' 라는 책을 읽은 적이 있는데, 해당 책 저자의 말을 빌리자면 테스트 더블은 외부 요인에 의존하는 객체에 대한 테스트를 작성할 때 "실패하는 테스트는 항상 실패하고, 성공하는 테스트는 항상 성공한다" 라는 테스트의 일관성을 지키기 위해 사용한다고 했다. 예를 들어 DB, 외부 API 등을 사용할 때, 네트워크 연결 상태 등을 ..

부트캠프/우아한테크코스 6기

[Java] Fluent API란? (feat. JDBC에 적용해보기)

Fluent API는 API의 패턴 중 하나이다. Fluent API는 메서드 체이닝 형태로 설계된 API이며, 그 목표는 도메인별 언어 (DSL)를 생성하여 코드 가독성을 높이는 것이다. 이 용어는 Eric Evans 와 Martin Fowler 가 2005년에 만들어냈다고 한다. Fluent API를 사용하는 대표적인 라이브러리로 AssertJ가 존재한다. 이전에는 Junit을 통해 하나의 메서드로 처리해야 했던 코드를 Fluent API 패턴을 적용한 AssertJ를 통해, 직관적인 형태로 메서드를 풀어내어 테스트 코드를 작성할 수 있도록 구현되어 있다. // Junit Assertions.assertTrue(true); // assertJ Assertions.assertThat(true).isTr..

부트캠프/우아한테크코스 6기

[Java] 생성자 체이닝(Constructor Chaining) 기법

생성자 체이닝(Constructor Chaining)이란? 생성자 체이닝은 생성자가 2개 이상일 경우, 전체 인스턴스 필드의 값 초기화를 담당하는 하나의 주 생성자를 두고 이 외의 부 생성자들은, 자신보다 상위의 부 생성자를 호출하는 체이닝 구조를 거쳐 최종적으로 주 생성자를 호출하여 객체를 생성하도록 만드는 방식이다. 즉, 실제 객체 초기화를 담당하는 주 생성자 이 외에는 상위 생성자를 호출해나가는 구조인 것이다. 적용 기존 코드 public Player(final String name) { super(Cards.createEmpty()); this.name = new Name(name); } public Player(final String name, final Cards cards) { super(c..

부트캠프/우아한테크코스 6기

[Java] 자바에서 라인을 ‘잘’ 개행하는 방법

자바에서의 개행 📃 본인은 보통 자바의 문자열 내에서 라인을 개행할 때 아래와 같이 개행하곤 했다. System.out.println("안녕하세요\\n"); 그러던 중, 조원과의 대화를 통해 놓치고 있던 부분에 대한 하나의 인사이트를 얻게 되었다. 그건 바로 개행 문자는 OS별로 상이하다는 점이다. 이전에 대학 강의에서 배웠던 것이 어렴풋이 기억이 나긴 하지만 정확히는 기억이 나질 않아 찾아보았고 그 결과 개행 문자가 3종류나 존재하고 있으며, OS 별로 상이한 경우도 존재함을 알 수 있었다. 개행문자 종류 CRLF(\r\n), CR(\r), LF(\n) Windows 운영체제: CRLF(\r\n) Unix 계열: LF(\n) Mac: CR(\r) 이후 Macintosh: LF(\n) 🧐 그럼 \n 없이..

부트캠프/우아한테크코스 6기

[Java] 클래스 멤버는 각자의 위치가 존재한다

Java 클래스 멤버는 각자의 위치가 존재한다. 우테코 미션에 대해 코드리뷰를 받으면서 이런 리뷰를 듣게 되었다. 클래스 변수의 선언부를 최상단으로 바꾸는 게 어떨까요? 컨벤션에 맞춰주시면 좋을 거 같아요! 클래스 멤버가 각각의 위치를 가지고 있다는 건 알았지만 내가 컨벤션을 잘못 기억하고 있었나보다 싶었다. 때문에 다시 한 번 찾아보고, 기록으로 남겨두고자 한다. 나 외에도 필요한 사람들에게 도움이 되었으면 좋겠다! 클래스 멤버의 선언 순서 Oracle의 자바 Code Covention 문서를 보면 클래스 멤버는 각자의 선언 위치를 가지고 있음을 알려준다. Class (static) variables public → protected → default → private 순서 Instance variab..

PgmJUN
Back world