Programming

·Java, Kotlin
JPA (Java Persistence API)는 객체-관계 매핑(ORM) 프레임워크로, 엔티티 간의 관계를 매핑할 수 있습니다. JPA에서 지원하는 주요 관계 매핑 유형과 그 예시는 다음과 같습니다. 1. @ManyToOne 관계 @ManyToOne 관계는 다수의 엔티티가 하나의 엔티티를 참조하는 관계입니다. 예를 들어, 다수의 게시물(Board)이 하나의 사용자(User)를 참조할 때 사용됩니다. 속성: • cascade: 연관된 엔티티에 수행되는 작업을 지정합니다. • fetch: 연관된 엔티티를 언제 로드할지를 지정합니다.    FetchType.EAGER(기본값)은 즉시 로드, FetchType.LAZY는 필요할 때 로드합니다. • optional: 연관된 엔티티가 필수인지 여부를 지정합니다. ..
·Java, Kotlin
깊은 복사(Deep Copy)와 얕은 복사(Shallow Copy)는 객체 복사의 두 가지 방식으로, 객체를 복사할 때 복사된 객체와 원본 객체 간의 관계를 정의합니다.얕은 복사 (Shallow Copy)얕은 복사는 객체의 가장 바깥쪽만 복사하고, 객체 내부의 가변 필드는 참조만 복사합니다. 즉, 원본 객체와 복사된 객체가 동일한 내부 객체를 참조하게 됩니다. 얕은 복사를 수행할 때는 다음과 같은 사항을 고려해야 합니다:간단한 구조: 얕은 복사는 기본적으로 Object.clone() 메서드를 사용하거나 수동으로 필드를 복사합니다.성능: 얕은 복사는 빠르게 수행되지만, 참조가 공유되기 때문에 원본 객체나 복사된 객체의 내부 상태가 변경될 수 있습니다.예시class Address { String cit..
·Java, Kotlin
커스텀 불변 클래스란?자바에서 불변 클래스(Immutable Class)를 만드는 것은 객체의 상태를 한 번 설정하면 변경할 수 없도록 하는 것을 의미합니다. 불변 클래스는 여러 가지 이점을 제공합니다. 예를 들어, 멀티스레드 환경에서 안전하게 사용할 수 있으며, 객체의 불변성 때문에 예상치 못한 부작용을 방지할 수 있습니다. 불변 클래스의 특징객체의 상태를 변경할 수 없다: 모든 필드는 final이어야 한다.객체를 확장할 수 없다: 클래스를 final로 선언하여 상속을 방지한다.모든 필드는 private이어야 한다: 직접 접근을 막기 위해.필드에 대한 setter 메서드를 제공하지 않는다.모든 가변 필드는 복사본을 제공한다: 깊은 복사(deep copy) 또는 불변성 확보를 위해.불변 클래스 만들기다음..

Framework

·Spring
적용 계기github의 프로젝트 Repository를 public으로 변경하게 되면서,application.yml의 datasource: url, username, password이 외부에 공개되다 보니 이 값을 암호화할 필요성이 생기게 되었습니다. DB에 접근 허용 IP가 제한되어있어 외부에서 접속은 안되긴 하지만.. 그래도 꼭 필요한 작업이라 Jasypt를 통해 암호화를 적용하였습니다.혹시라도 application.yml에 설정 등 중요한 정보가 있을 경우 악용될 수 있으니 조심해야 할 것 같습니다. 🤨 Jasypt란?Jasypt(Java Simplified Encryption)는 애플리케이션 개발에서 중요한 정보를 쉽게 암호화하고 복호화할 수 있도록 도와주는 라이브러리입니다. Spring Boot..
·Spring
오늘은 Spring Security 설정 방법에 대해 작성하려 합니다. 🙃 현재 프로젝트 개발 환경은 아래와 같습니다.- **Language** : Java 17- **Framework** : Springboot (3.2.5)- **Database** : MariaDB- **ORM** : JPA- **Frontend**: Thymeleaf- **Build**: Gradle 1. 프로젝트 초기 설정Gradle을 사용하여 필요한 의존성을 추가합니다. build.gradledependencies { implementation 'org.springframework.boot:spring-boot-starter-security' testImplementation 'org.springframework.s..
·Spring
RESTful API 컨트롤러 (@RestController)의 @GetMapping은 HTTP Get Method에 해당하는 단축 표현으로 서버의 리소스를 조회할 때 사용하는데요.🤨 컨트롤러에서 데이터를 파라미터로 받을 때는 @RequestParam, @ModelAttribute, @PathVariable (경로 변수), 어노테이션 생략(DTO 객체) 등 다양한 방법이 있습니다.헷갈리지 않도록 각각의 차이에 대해 정리하려 합니다. 🧐(추가로 HttpServletRequest, @RequestBody, @RequestPart도 같이 정리) 1. @RequestParam 사용개별 쿼리 파라미터를 1:1로 매핑하여 사용합니다. (body를 직접 조회하지 않습니다.)@RequestParam은 단일 값(예:..

Database

·MySQL, MariaDB
MySQL에서 컬럼 데이터타입 중 datetime과 timestamp의 차이각각의 특징과 어떤 상황에서 어느 것을 선택하는 것이 좋을까요? 1. datetime 데이터 타입 • 특징: • YYYY-MM-DD HH:MM:SS 형식으로 날짜와 시간을 저장합니다. • 특정한 시점의 날짜와 시간을 명시적으로 저장할 수 있습니다. • 범위는 1000-01-01 00:00:00에서 9999-12-31 23:59:59까지입니다. • 장점: • 사용자가 직접 지정한 시간을 정확하게 저장할 수 있습니다. • 날짜와 시간이 변하지 않고 고정된 경우에 유용합니다. • 사용 예시: • 사용자가 이벤트에 참여한 시간 등 정확한 시간을 기록해야 할 경우. • 정확한 시간대가 중요한 경우, 예를 들어 특정 시간대에 데이터를 분석하..
·MySQL, MariaDB
MySQL과 MariaDBMariaDB와 MySQL은 많은 유사점을 공유하지만, 몇 가지 중요한 차이점도 존재합니다. MariaDB는 MySQL에서 파생된 포크(fork)로, MySQL의 원래 개발자들에 의해 유지보수되고 있습니다. 두 데이터베이스 시스템 간의 차이점을 이해하는 것은 올바른 선택을 위해 중요합니다.  공통점 • 기본 아키텍처: 두 시스템 모두 동일한 기본 아키텍처를 공유합니다. • SQL 표준 준수: 둘 다 SQL 표준을 준수합니다. • 유사한 기능 세트: 트랜잭션, 인덱스, 저장 프로시저, 뷰, 트리거 등을 지원합니다. • 유사한 클라이언트 및 도구: MySQL 클라이언트, 드라이버, 도구 대부분이 MariaDB에서도 작동합니다.  차이점1. 라이선스  • MySQL: Oracle이 소..
·MySQL, MariaDB
MySQL 컨벤션(Convention)은 코드의 일관성과 가독성을 높이기 위해 주로 사용하는 규칙입니다.최신으로 많이 사용하는 MySQL 컨벤션을 몇 가지 카테고리로 나누어 설명하겠습니다. (24년 기준) 1. 테이블 및 컬럼 이름 • 소문자 사용: 테이블과 컬럼 이름은 소문자로 작성합니다. • 스네이크 케이스: 단어 사이를 밑줄(_)로 구분합니다. • 예: user_accounts, order_details • 단수형 사용: 테이블 이름은 단수형으로 합니다. • 예: user, order • 명확한 이름: 테이블 및 컬럼 이름은 가능한 한 명확하고 직관적으로 작성합니다. • 예: created_at, updated_at 2. 데이터 타입 • 정확한 타입 선택: 데이터 타입은 저장하려는 데이터에 가장 적..

Server, OS

·Hosting
카페 24에서 SSL 구매 후 인증서 적용하는 방법  보안인증서 신청 후 [HTTP 인증]을 신청하신 경우 하기 순서에 따라 진행해주신다면 인증이 가능합니다.1. 카페24 호스팅 센터 > [나의서비스관리 > 인증서관리 > 인증서 받기]를 통해 인증파일 다운로드를 받으실 수 있습니다.  2. FTP프로그램을 통해 서버에 접속하시어 [www(루트디렉토리)/.well-known/pki-validation] 폴더를 생성 후[ pki-validation]폴더 내 인증파일 업로드 진행 바랍니다. ※ [.well-known]폴더 생성시  . ※  Tomcat JSP 호스팅 HTTP인증용 파일 업로드 경로는 아래와 같습니다.       tomcat/webapps/ROOT/.well-known/pki-validation..

Version Control System

·Git
README.md 파일 생성 방법 1. Github에 접속하여 자신의 프로젝트 Repository를 접속하면, README.md 파일이 생성되어 있지 않을 경우 아래와 같이'Add a README' 라는 버튼이 활성화 되어 있다. 또는  2. 'Add a README' 버튼을 클릭 하고 아래와 같이 'Edit' 편집 영역에서 내용을 작성한다.  3. 작성한 내용을 'Preview' 를 눌러 확인 할 수 있다. 입력을 완료 했으면 'Commit changes...' 버튼을 클릭한다.  4. Commit message와 Excended description을 입력하고, 'commit changes' 버튼을 눌러 README.md 파일을 생성한다.  5. Repository 루트에 README.md 파일이 생..
·Git
1. Repository private public 차이 Public Repository 1. 가시성: 누구나 볼 수 있습니다. 인터넷에 접속할 수 있는 모든 사용자가 접근하여 코드를 볼 수 있습니다. 2. 협업: 오픈 소스 프로젝트에 적합합니다. 누구나 repository를 포크(fork)하여 기여할 수 있습니다. 3. 검색 가능: 검색 엔진과 GitHub 검색 기능을 통해 쉽게 찾을 수 있습니다. 4. 무료 사용: GitHub의 무료 요금제로 사용할 수 있습니다. Private Repository 1. 가시성: 소유자와 소유자가 초대한 특정 사용자만 접근할 수 있습니다. 비공개로 설정되어 외부에서는 볼 수 없습니다. 2. 협업: 제한된 사용자만 접근하고 협업할 수 있습니다. 비즈니스 프로젝트나 민감한..
·Git
Github의 Repository가 private일 경우 public 으로 변경하는 방법입니다. Repository private -> public 변경 방법1. 변경 할 Repository 클릭 -> Settings 클릭 2. 스크롤을 내린 후 Danger Zone > Change repository visibility > 'Change visibility' 버튼 클릭 -> 'Change to public' 클릭  3. 'I wans to make this repository public' 클릭 4. 내용 확인 후 'I have read and understand these effects.' 클릭   5. 확인 문구 확인 후 (계정명/레파지토리명) 그대로 입력 -> 'Make this repositor..

Methodology

·Clean
도서명쪽수저자, 출판사발행일Clean Code : 클린 코드584로버트 C. 마틴/박재호, 인사이트(insight)2013년 12월 24일  들어가면서 이 책에 나오는 모든 지침은 로버트 C. 마틴이 이미 밝혔듯이 절대적이라 생각하면 안 되며, 언제든지 개선의 여지가 있다고 생각하는 편이 바람직하다. 여기서 핵심은 팀이나 공동체에서 서로 동의하는 합리적인 원칙을 세우기 위한 소통에 있다.이 책은 세 부분으로 나눠진다. 첫번째 - 깨끗한 코드를 작성하는 원칙, 패턴, 실기두번째 - 여러 사례 연구 소개. 코드를 깨끗하게 고치는, 즉 문젝 있는 코드를 문제가 더 적은 코드로 바꾸는 연습세번째 - 사례 연구를 만들면서 수집한 냄새와 휴리스틱을 마지막 장에서 열거한다.여러 사례 연구를 검토하고, 모든 결정과 단..
·TDD
도서명쪽수저자, 출판사발행일테스트 주도 개발 시작하기 : Test-Driven Development303최범균, 가메출판사2020년 02월 18일 1. TDD 개발 준비Test-Driven Development = 테스트 주도 개발TDD는 테스트부터 시작한다. 구현을 먼저 하고 나중에 테스트하는 것이 아니라 먼저 테스트를 하고 그다음에 구현한다.기능을 검증하는 테스트 코드를 먼저 작성하고 테스트를 통과시키기 위해 개발을 진행IntelliJ , Gradle에서 TDD 설정 방법Project SDK 에서 JDK의 버전은 자바 8 이상으로 선택Libraries 추가File -> Project StructureGradle JUnit 설정build.gradle 에 아래 내용 추가  -> gradle 4.6 버전부..
·TDD
테스트 코드 작성 순서- 쉬운 경우에서 어려운 경우로 진행- 예외적인 경우에서 정상인 경우로 진행 초반에 복잡한 테스트부터 시작하면 안되는 이유 -> 초반부터 다양한 조합을 검사하는 상황을 테스트로 추가하면 해당 테스트를 통과시키기 위해 한 번에 구현해야 할 코드가 많아진다. 구현하기 쉬운 테스트부터 시작하기 -> 가장 구현하기 쉬운 경우부터 시작하면 빠르게 테스트를 통과시킬 수 있다.  ex) 모든 조건을 충족 하는 경우 > 한 규칙만 충족하는 경우 > 모든 조건을 충족하지 않는 경우 예외 상황을 먼저 테스트해야 하는 이유  -> 초반에 예외 상황을 테스트하면, 예외 상황에 따른 if-else 구조가 미리 만들어지기 때문에 많은 코드를 완성한 뒤에 예외 상황을 반영할 때보다 코드 구조가 덜 바뀐다. 완..

Util

·Development Tool
IntelliJ IDEA에서 프로젝트를 진행 할 때 새로운 프로젝트를 open 하면 기존 프로젝트가 대체되는데,아래 설정을 통해 여러 프로젝트를 동시에 띄울 수 있습니다. 1. IntelliJ IDEA -> Settings... 클릭  2. 좌측에 Appearance & Behavior -> System Settings 클릭 -> Project 영역의 Open project in 을 'New window' 로 변경한 후 'OK' 클릭  이제 새로운 프로젝트를 Open 했을 때 새로운 창으로 오픈됩니다 :D 진작에 설정할껄..!
·Development Tool
현상인텔리제이 프로젝트 소스를 통째로 옮기고 Open을 하였는데.. 파일들이 보이지 않고 파일 검색도 안되는 상태..!  해결 방법1. File -> Project Structure... 를 선택한다. 2. Project Settings -> Modules -> + 버튼 (Add) -> Import Module 를 선택한다. 3. 프로젝트 폴더를 선택하고 Open 을 선택한다. 4. Create module from existing sources -> Next 선택 -> 구성 요소들 모두 체크 하여 계속 Next 선택 5. 추가 된 모듈 확인하고 OK 클릭 6. 프로젝트의 파일들이 정상적으로 보이게 됩니다. 해결!

Other

·자격증, 면접
자바 백엔드 개발자 면접에서 아키텍처를 설명할 때는, 시스템의 주요 구성 요소와 이들 간의 상호 작용을 명확하게 설명하는 것이 중요합니다. 아키텍처 설명 시, 일반적으로 다음과 같은 구조를 따를 수 있습니다.1. 전체적인 시스템 개요먼저, 전체 시스템의 개요를 간단히 설명합니다. 시스템이 무엇을 하는지, 어떤 문제를 해결하는지, 주요 기능은 무엇인지를 설명합니다.  예) OOO 시스템은 온라인 교육 학원 애플리케이션으로, 주문 관리, 수강 관리, 사용자 관리, 쿠폰 관리, 문의 관리, 기기 관리 기능을 포함하고 있습니다. 회원&인증 서버는 독립적으로 분리되어 있고, 나머지 기능은 단일 애플리케이션으로 통합되어 있습니다.2. 주요 구성 요소 (Components)시스템을 구성하는 주요 요소들을 설명합니다...
·자격증, 면접
인성 관련 질문업무 경험을 살려 자기소개 해주세요.저희 회사에 지원하신 이유는 무엇인가요?이직하게된 이유를 알려주세요.성격의 장점과 단점에 대해 말해주세요(업무와 연관지어)입사를 하게 된다면 있었으면 하는 문화와 없었으면 하는 문화가 있을까요?입사를 해서 와서 물어보면 알려줄수 있지만 누군가 나서서 알려주지 않을수도 있는데 괜찮으신가요?만약에 입사를 하게 되신다면 저희 회사에게 이득이 될 만한 일이 있을까요?예상 질문에 대한 답변을 준비했는데 질문에 없었다면 직접 어필해주세요.스트레스를 풀기 위한 취미는 무엇인가요?억대 연봉을 받는 개발자의 강점은 무엇일까요?회사에서 오퍼가 왔을 때 가장 중요하게 생각하시는게 뭔가요?회사를 선택하실때 중점적으로 보시는 부분은?싫어하는 동료의 유형은 무엇인가요?레퍼런스 체..
·자격증, 면접
1. 스프링 프레임워크란 무엇인가요?자바 엔터프라이즈 애플리케이션 개발을 위한 가장 널리 사용되는 프레임워크입니다.경량화, 제어 역전(IOC), 관점 지향 프로그래밍(AOP), 트랜잭션 관리 등의 기능을 제공합니다.2. 스프링을 사용하면 어떤 장점이 있나요?경량화로 프레임워크로 인한 개발 오버헤드가 적습니다.IoC 컨테이너가 객체 간 의존성 주입을 관리해줍니다.AOP로 핵심 로직과 시스템 서비스를 분리할 수 있습니다.3. 대표적인 스프링 하위 프로젝트들은 무엇인가요?스프링 코어: IoC/DI 등 프레임워크 핵심 기능 제공스프링 JDBC: JDBC 코딩 없이 DB 연동 기능스프링 ORM: JPA, Hibernate 등의 ORM 연동 계층스프링 웹: 파일 업로드, 서블릿 리스너 등 웹 관련 기능스프링 MVC..

Project

베니코드
베니코드