분류 전체보기

라즈베리파이4 - 홈서버 구축기(외장 하드 마운트, 포트포워딩)
1. 라즈베리파이 OS 설치 및 SSH 접속모니터 없이 라즈베리파이4에 OS를 설치하고 SSH 접속을 하기 위해 Raspberry Pi Imager(이하 imager)를 활용한다.https://www.raspberrypi.com/software/imager를 활용해 원하는 OS 이미지를 선택하고, SSH 접속에 필요한 정보 및 wifi 정보를 설정한다.모든 설정이 완료되면 Micro SD 카드에 OS이미지를 저장한다. 이후 SD카드를 라즈베리파이4에 삽입 후 설정한 정보대로 SSH 접속을 하면 된다.라즈베리파이4의 IP주소는 공유기 관리자에 접속해서 확인할 수 있다. 참고 블로그 : https://main.tistory.com/2782. 외장 하드 마운트2-1. 장치 선택성능이 크게 중요하지 않았기에 중..

Spring - @Transactional 활용해 멀티 스레드 환경을 테스트할 때 주의점
문제 상황동시성 이슈를 고려해 상품의 재고량을 감소시키는 토이프로젝트를 할 때 발생한 문제다.동시성을 고려한 테스트를 위해 아래와 같이 코드를 작성했다.@Transactional@DisplayName("멀티 스레드 환경에서 상품 재고를 감소한다.")@Testvoid findAllProductsByNosWhenMultiThreadEnv() throws InterruptedException { // given Product product = createProduct(1000L, "1번 상품", 2000, 100); productRepository.save(product); OrderRequestDto orderRequestDto = new OrderRequestDto(); ..

Spring - 요청 파라미터 LocalDate타입 필드에 바인딩 및 검증
1. 배경 GET방식의 요청에서 쿼리 스트링으로 전달되는 값을 LocalDate 타입으로 변환하고, 검증할 때 겪은 문제다. 아래 처음에 작성한 코드다. startDate, endDate 두 개의 파라미터를 전달받아 LocalDate 타입으로 변환하고, null여부를 확인한다. 이 때 "http://localhost:8080/get?endDate=2024-04-01"로 요청하면 발생하는 문제는 크게 두 가지다. String -> LocalDate 변환 안됨 LocalDate의 null 검증 작동 안함 - null검증이 안되기 때문에 validateStartDtEarlierEndDt() 호출 후 NPE발생 @GetMapping("/get") public Object get(@Valid MyObject my..
회고 - TDD, 클린 코드 with Java
23.10.30 ~ 23.12.14동안 진행한 TDD, 클린 코드 with Java 17기의 교육을 무사히 완주했다. 약 한달 반정도 교육을 진행하며 새롭게 학습하고, 부족했던 부분들을 미션별로 정리해보자. 1. 자동차 경주 - 단위 테스트 이전에 자바 플레이 그라운드 With TDD, 클린 코드에서 한 번 경험했던 미션이라 어렵지 않게 수행할 수 있었다. 다만 앞서 말한 교육을 경험하지 않은 상태에서 TDD, 클린 코드 With Java과정을 들었다면 교육을 무사히 끝마칠 수 있었을 까 생각이 든다. 1-1. 학습 테스트 테스트를 통해 다양한 API를 학습할 수 있다. 보통 학습 테스트라고 불려진다. 1-2. 문자열 덧셈 계산기 인자로 받은 매개변수의 값을 변경해 반환하는 것은 피하도록하자. publi..

서평 - 스프링 입문을 위한 자바 객체 지향의 원리와 이해
구성 이 책은 크게 7개의 챕터로 구성되어 있다. 1장은 기계어부터 객체 지향 프로그래밍 패러다임이 탄생한 배경까지 빠르게 프로그래밍 언어의 발전 과정을 살펴본다. 2장에선 Java에 남아있는 이전 프로그래밍 패러다임의 잔재와 JVM 메모리 구조를를 알아본다. 3장에선 객체지향의 4대 특징을 다양한 메타포를 사용해 설명한다. 4장에선 Java에서 객체지향의 특성을 확장하기 위해 사용한 방법들에 대해 알아본다. 5장에선 객체지향 설계 원칙 SOLID에 대해 알아본다. 6장에선 Spring에서 사용되는 다양한 디자인 패턴을 SOLID원칙과 비교하면 설명한다. 마지막 7장에 Spring의 3가지 핵심원리인 IoC/DI, AOP, PSA를 예제를 통해 설명한다. 부록에선 스프링MVC를 활용해 게시판을 만들며 앞..
Java - 함수(function)와 메서드(method), 일급 객체
함수 vs 메서드 자바에서 함수(function)는 일반적으로 정적 메서드(static method)와 같은 의미로 사용된다. 또 일반적으로 함수는 특정 클래스에 속하지 않고 전역적으로 호출될 수 있다. 하지만 메서드는 보통 특정 클래스에 선언되기에 종속적이다. 즉, 함수는 전역적으로 사용될 수 있는 독립적인 존재, 메서드는 클래스와 같은 구조체에 종속적인 존재다.아래의 코드를 통해 확인해보자.public class FirstClass { public static void callFunction() { System.out.println("함수"); }}public class SecondClass { public void callMethod() { System.out.println("메..