분류 전체보기

Git

[Git] Github 협업 이것만은 알자!

벨로그에 연재하고 있는 깃허브 협업에 대한 기초 지식을 쌓을 수 있는 시리즈입니다! 필요하시면 참고하세요 :) 시리즈 | Github 협업, 이것만은 알자 - pgmjun.log 이슈(Issue)란 프로젝트에서 작업해야할 단위라고 할 수 있습니다.개발해야하는 기능 발생, 수정해야할 사항 버그 발생, 리팩터링 해야하는 코드 발생 등 프로젝트에서 발생되는 작업들을 이슈로 velog.io

BackEnd/Spring

[Spring / Java] @PostConstruct, Static Block, Instance Block 초기화 시점 차이

자바 스프링 기술로 개발을 해봤다면 @PostConstruct 과 Static block, Instance block 을 사용해본 경험이 있을 것이다. 이는 객체 초기화를 위한 콜백(callback) 함수를 선언하기 위한 기술이다. 콜백(Callback) 함수란? 콜백 함수는 다음과 같은 의미를 가진다. 다른 함수 인자로서 사용되는 함수 어떠한 이벤트에 의해 호출되는 함수 이 글에서의 설명은 2번째 의미인 '어떠한 이벤트에 의해 호출되는 함수' 에 가깝다. 본인또한 이 3가지를 종종 다루긴 했지만, @PostConstruct 와 Static block 중 어떤 것을 사용할 지 고민하던 중 이 두 가지의 초기화 시점 차이에 대해 정확히 인지하지 못한 채로 사용하고 있었다는 것을 깨닫게 되었다. 때문에 이를..

BackEnd/Spring

[Spring] 의존성 주입 시, 같은 Type의 빈이 2개 이상일 경우

우리는 스프링을 사용할 때, 생성자 주입을 통해 의존성을 주입하곤 한다. 그런데 의존성을 주입하는 경우, 2개의 의존성 중 하나를 주입해야하는 경우가 있을 것이다. public interface DiscountPolicy {} @Component public class FixDiscountPolicy implements DiscountPolicy {} @Component public class RateDiscountPolicy implements DiscountPolicy {} @Autowired private DiscountPolicy discountPolicy 만약 위와 같이 FixDiscountPolicy와 RateDiscountPolicy가 스프링 빈으로 존재할 때, 다음과 같이 @Autowire..

BackEnd/Spring

[Spring] 컴포넌트 스캔(ComponentScan)

이전 글을 통해 @Configuration 애노테이션을 통한 스프링 빈 등록에 대해 알아보았다. [Spring] @Configuration과 싱글톤 (with. CGLIB) @Configuration public class AppConfig { @Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } @Bean public OrderService orderService() { return new OrderServiceImpl(memberRepository(), discountPolicy()); } @Bean p pgmjun.tistory.com 하지만 꼭 빈을 등록할 때, @Configur..

BackEnd/Spring

[Spring] @Configuration과 싱글톤 (with. CGLIB)

@Configuration public class AppConfig { @Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } @Bean public OrderService orderService() { return new OrderServiceImpl(memberRepository(), discountPolicy()); } @Bean public MemberRepository memberRepository() { return new MemoryMemberRepository(); } } 해당 코드는 OrderService, MemberService, MemberRepository 빈(Be..

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을 사용하여 짧고 가독성있는 코드로 리팩토링하여 사용하고자 하였다. 그리고 이때 머릿속에 한가지 고민이 생겼다 🤔 미션의 요구사항에 자동차의 수는 제한이 없는데, 그럼..

PgmJUN
'분류 전체보기' 카테고리의 글 목록