-
MockitoSpring Boot 🍃 2023. 12. 1. 00:01
컨셉이 정말 재밌는 프레임 워크다 😆 모킹?목킹?마킹? 맛있는 모킹 프레임워크! 사이트에 가보면 숙취 없는 맛이 정말 좋은 모킹 프레임워크라고 소개하고있다. 🙈🍸 근데 모킹이 뭐지; 모르는게 너무 많다 ㅋㅋ 🙈 모킹 Mocking 세상에 🙊 조롱이란 뜻이었다. 디비를 조롱하는건가.........??!?!? 놀라워서 앵무새한테 번역을 부탁해봤더니 흉내내는 이라는 뜻도 있었다. 여기서 사용된 모킹은 흉내내는 이라는 의미겠지! Mock Object 모의 객체 모의 객체 Mock Object란 주로 객체 지향 프로그래밍으로 개발한 프로그램을 테스트 할 경우 테스트를 수행 할 모듈과 연결되는 외부의 다른 서비스나 모듈들을 실제 사용하는 모듈을 사용하지 않고 실제의 모듈을 흉내내는 가짜 모듈을 작성하여 테스트의 효..
-
함수형 인터페이스Language/Java 2023. 12. 1. 00:01
Functional Interface java 8에서 도입된 개념으로 정확히 하나의 추상 메서드를 가진 인터페이스를 말한다. 이 함수형 인터페이스는 람다 표현식으로 잘 활용된다. 자바에는 여러가지 내장된 함수형 인터페이스가 있지만, 특히 자바 공부할 때 기능 설명 부분에서 자주 볼 수 있었던 몇 가지 인터페이스에 대해서 정리 ✏️ Function 매개변수 : T Return 타입 : R 추상 메서드 : apply() 기능 : T 타입의 인자를 받으며, R 타입의 결과를 반환한다. 사용 예시 기본 표현 방식 사용 public static void getLastIndex(String text) { Function getBasicLastIndex = new Function() { @Override public..
-
Spring Boot 안쓰고 일반 java 프로젝트(build tool: gradle)에 Lombok 추가하기IDE/인텔리제이 IntelliJ 2023. 12. 1. 00:01
1. dependency 추가 이 사이트 https://projectlombok.org/setup/gradle에서 Gradle without a plugin 부분에 있는 dependency 복사 사이트에 나와있는 문법은 Groovy 문법이라서, gradle 언어를 Kotlin으로 한 경우 약간의 수정을 해주어야 한다. 작은 따옴표'를 큰 따옴표"로 변경 경로부분?? 'url:버전' 써있는 부분과 메서드 이름(compileOnly 등등) 사이의 공백을 지우고, 경로부분을 괄호()로 감싸준다. 👇요렇게 dependencies { compileOnly("org.projectlombok:lombok:1.18.26") annotationProcessor("org.projectlombok:lombok:1.18.26..
-
enum 클래스Language/Java 2023. 11. 30. 00:01
열거형 클래스 enum enum 키워드를 사용하는 열거형 클래스에는, 상수값을 나열하여 사용하는 방법 외에도 다양한 사용 방법이 있다. 일반적인 클래스와 마찬가지로, 생성자, 필드, 메서드를 가질 수 있다. 이 주제를 정리하게 된 이유는 강의 실습 중에 아래와 같은 사용을 경험했고 전혀 이해하지 못했기 때문이다. 🔻 실습 중 사용된 코드들 // 1. Enum 클래스 정의 @Getter @AllArgsConstructor public enum ErrorCode { USER_NOT_FOUND("사용자가 없습니다."); private final String description; } // 2. 1에서 정의한 Enum 클래스를 사용하기 위한 AccountException 클래스 작성 @Getter @Setter..
-
OptionalLanguage/Java 2023. 11. 30. 00:01
Optional java.util.Optional Java8에서 등장! null이 나올수 있는 객체를 감싸서 null이 나올 수 있는 객체를 더욱 안전하게 사용할 수 있게 해주는 클래스이다. Optional 형태로 사용하는데 , 이것은 T 객체가 null을 반환할 가능성이 있음을 명확하게 나타낸다. Optional 클래스를 사용함으로써 NullPointerException 에러를 방어할 수 있다. Optional 생성 1. Optional 반환하는 메서드 정의 public interface AccountRepository { Optional findFirstByOrderByIdDesc(); } 2. Optional.of(T value) T 자료형인 value가 null이 아닌 경우 반환 값 : Optin..
-
에러 기록 : Spring Boot 실행 중지 시 Embedded Redis Server 종료 안됨에러기록 2023. 11. 30. 00:01
🙄 여기서 핵심 문장만 보면 Caused by: java.lang.RuntimeException: Can't start redis server. Check logs for details. Redis process log: [22260] 09 May 03:22:37.692 # Creating Server TCP listening socket 127.0.0.1:6379: bind: No such file or directory 요거다. 분명 처음 시도했을때는 잘 되었는데, 두번째 시도부터 이 에러가 났다. 서버를 왜 시작하지 못했을까? 인터넷 검색해보니 이렇게 -> rogal.tistory.com 같은 오류로 힘들었던 사람이 나타나서 우선은 금방 해결할 수 있었다. 스프링 종료 후 윈도우 시스템 작업관리자 ..
-
트랜잭션DB 2023. 11. 30. 00:01
ACID Atomic 원자성 All or Noting 모든 작업이 실행되거나 혹은 모두 실행되지 않아야 한다. 예시) A 계좌에서 B 계좌로 잔액을 송금할 때 A계좌 잔액 줄이기 작업과 B계좌 잔액 늘리기 작업은 함께 성공하거나 함께 실패해야 한다. Consistency 일관성 모든 트랜잭션이 종료된 후에는 DB의 제약조건을 모두 지키고 있는 상태가 되어야 한다. 예시) 잔액은 0원 이상이다. 이를 위반하는 트랜잭션은 모두 중단된다. Isolation 격리성 트랜잭션은 다른 트랜잭션과 독립적으로 동작해야 한다. A 트랜잭션이 하는 일을 B 트랜잭션은 모르게 해야한다. 하지만 현실은 성능과 안정성의 트레이드 오프 관계에 있는 부분이다. READ_UNCOMMITTED > READ_COMMITTED > REP..
-
자바 메모리 모델 Java Memory ModelLanguage/Java 2023. 11. 30. 00:01
자바 메모리 모델은 자바 프로그램의 동시성을 다루는 메모리 동작에 대한 명세 = JVM이 동시에 실행되는 스레드 간의 메모리 접근을 어떻게 조정하는지에 대한 설명 이다. 🙈;; 아직은 너무 어려운 내용이었다. 일단 기록! 1. 메모리 배치 Memory Layout 요약 저장 영역 종류 Stack 로컬 변수 Stack 메소드 반환 값 Stack 메소드 호출 완료 후 실행이 이어질 위치 주소 - - Heap 객체 Heap 인스턴스 변수 = 멤버 변수 Heap static 변수 - - Method 영역 Metaspace 상수 풀 (클래스 및 인터페이스의 상수, 리터럴, 심볼릭 참조 등) Method 영역 Metaspace 클래스 메타데이터 (클래스 이름, 접근 제어자, 인터페이스, 슈퍼클래스 등 클래스와 관련..
-
싱글톤 패턴Language/Java 2023. 11. 30. 00:01
책을 보다가 싱글톤 패턴에 대한 코드를 봤는데, 내가 사용하는 코드와 다른 방식으로 설명을 해서 챗봇에게 책에서 본 코드와 내가 사용하는 코드를 비교해서 설명해달라고 부탁했다. 결론부터 얘기해보자면 두개는 다른 패턴의 싱글톤 구현 코드였고, 내가 사용하던 코드에는 심지어 문제가 있었다. 🙊 스레드 안전성이 없다고 한다, 관련해서 두 가지 문제점을 지적받았는데, 첫 번째로 synchronized 블록을 사용하지 않았기 때문에 여러 스레드가 동시에 getInstance()에 접근하게 된다면 Hello 인스턴스가 여러번 생성될 수 있는 문제가 있었고, 두 번째로는 멀티스레드 환경에서 Hello 인스턴스를 생성한 후 다른 스레드가 이것을 볼 수 없는 경우가 발생할 수 있다고 한다. 인스턴스 생성 과정에서 컴파일..
-
MySQL DB 생성, USER 생성 및 권한 입력 쿼리DB/MySQL 2023. 11. 30. 00:01
DB 목록 출력 show databases; DB 생성 create database DB_NAME; USER 생성 create user 'USER_NAME'@'localhost' identified by '비밀버노'; USER 확인 후 root 권한 주고 DB에 즉각 반영 select `user` from `mysql`.`user`; show grants for 'USER_NAME'@'localhost'; grant all on `DB_NAME`.* to 'USER_NAME'@'localhost' with grant option; flush privileges;