전체 글

·백엔드/Java
Maven Central 포털의 Gradle 플러그인을 사용한 방식으로 라이브러리를 배포하는 방법을 정리한 글입니다.2024년 3월 12일부터 issues.sonatype.org는 폐쇄되어 모든 등록은 중앙 포털을 통해 이루어지도록 변경되었습니다. 기존 Nexus repository(OSSRH)로 올리는 방식을 사용하던 사용자는 기존 방식을 그대로 사용할 수 있지만, 신규 사용자라면 Maven Central을 통해서 라이브러리를 배포해야 합니다.1. Maven Central 계정 설정따로 도메인이 존재하는 경우 지침서에 따라 Namespace를 등록 하시면 됩니다. 참고로 github는 io.github.사용자이름 형식입니다.아래의 공식 홈페이지에 github 소셜 로그인을 하면 번거로운 작업 없이 Na..
·백엔드/Test
TDD란 Test Driven Development의 약자로 테스트 주도 개발이라고 합니다. 반복 테스트를 이용한 소프트웨어 방법론으로 작은 단위의 테스트 케이스를 작성하고 이를 통과하는 코드를 추가하는 단계를 반복하여 구현합니다. TDD에 대해 알아보기 전에 전통적인 개발 방식은 코드를 어떤 순서로 작성하는지 TDD와 비교해 무엇이 다른지 알아봅시다. 전통적인 개발 방식(Traditional Development) 전통적인 개발 방식은 위와 같이 1. 애플리케이션 구상 → 2. 코드 작성 → 3. 테스트 코드 작성 순서로 애플리케이션을 개발합니다. 이미 코드를 먼저 작성하였기 때문에 여러 가지 많은 이유로 테스트 코드 작성을 하지 않거나 아예 작성하지 않는 경우도 많이 볼 수 있습니다. 이러한 흐름을 ..
·백엔드/Test
단위 테스트는 일반적으로 실행 순서에 의존해서는 안 되지만 특정 상황에서 실행 순서를 적용해야 하는 경우가 있습니다. 예를 들어 테스트 순서가 중요한 통합 테스트나 기능 테스트를 작성해야 할 경우입니다. 먼저 간단한 테스트 코드를 작성하고 실행해 보겠습니다. 순서를 학습하기 위한 예제라 테스트 메서드 내용은 생략하겠습니다. public class OrderTest { @Test void 가_테스트() { } @Test void 나_테스트() { } @Test void 다_테스트() { } @Test void 라_테스트() { } @Test void 마_테스트() { } } 테스트 클래스에 작성된 순서로 나오지 않는다는 것과 가나다 순서도 아닌 것을 확인할 수 있습니다. 실제 Junit 공식 문서를 확인해..
·백엔드/Test
테스트 코드를 작성하다 보면 각각 중복되는 작업이 많이 생깁니다. 예를 들면 각 테스트 전에 테스트 수행에 필요한 객체를 만들거나 테스트 데이터를 초기화하는 작업 등이 있습니다. JUnit은 이러한 중복 작업에 대해 편리하게 작업이 가능하도록 라이프 사이클 메서드 어노테이션을 제공합니다. @BeforeEach 테스트 메서드 전에 실행됩니다. 테스트 전에 필요한 객체를 생성하거나 테스트 데이터 설정에 자주 사용합니다. @AfterEach 테스트 메서드 후에 실행됩니다. 테스트 후에 테스트 데이터를 다시 초기화 하는 작업에 많이 사용됩니다. 실행 순서 다이어그램을 먼저 보여드리고 코드로 어노테이션 예시를 보여드리겠습니다. @BeforeEach를 어떤 상황에 적용 가능한지 코드를 통해 보여드리면 // @Bef..
·백엔드/JPA
JPA 에서 엔티티의 연관관계를 설계하는 방법은 대표적으로 2가지가 있습니다. 1. @JoinColumn (조인 컬럼 - 외래 키) 2. @JoinTable (조인 테이블 - 테이블 사용) 이 글은 2가지 방법중 하나인 조인 테이블 사용법에 대해 간략하게 정리한 글입니다. 조인 테이블 장점 외래 키에 null을 허용하는 관계를 피할 수 있다. 이게 무슨말인지 코드를 먼저 보여드리면 @Entity public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "member_id") private Long id; @Column(name = "name") @Comment("이름") private String..
·백엔드/JPA
@Access(AccessType.FIELD), @Access(AccessType.PROPERTY) 란? JPA가 엔티티 데이터에 접근하는 방식을 지정할 수 있는 어노테이션 @Access(AccessType.FIELD) - 필드 접근 @Access(AccessType.PROPERTY) - 프로퍼티 접근 먼저 필드 접근 방식부터 알아보자 @Access(AccessType.FIELD) - 필드 접근 방식 ... 생략 @Entity @Access(AccessType.FIELD)// 생략해도 동일함 public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Transient private String..
·백엔드/JPA
JPA 에서 가장 중요하다고 생각하는 영속성 컨텍스트에 대해 정리한 글입니다. 영속성 컨텍스트란? 엔티티 매니저로 엔티티를 저장하거나 조회하면 영속성 컨텍스트에 엔티티를 보관하고 관리한다. 한 마디로 요약하면 "엔티티를 영구 저장하는 환경" 이다. 엔티티의 4가지 상태 먼저 엔티티에는 4가지 상태가 존재한다. 비영속 영속 준영속 삭제 1. 비영속 Member member = new Member(); // 객체 생성 member.setId("member1"); member.setUsername("회원1"); 순수한 객체 상태이며 영속성 컨텍스트나 데이터베이스와는 전혀 관련이 없는 상태 2. 영속 em.persist(member); // 객체를 저장 영속성 컨텍스트에 저장한 상태, 영속 상태로써 영속성 컨텍..
·인프라/Linux
자주 사용되는 리눅스 터미널 명령어 기초에 대해 정리한 글입니다. ls - 파일 또는 디렉토리의 목록을 조회하는 명령어 위의 예시로는 ls Desktop 등 상대경로와 절대경로를 사용하여 다른 경로의 목록 조회 모두 가능 *상대경로 - 현재 접속 중인 경로 기준으로 사용하는 경로값 - 상대경로를 사용하는 경우 현재 경로 기준 상위 경로 하위 경로로만 이동 가능 *절대경로 - 최상위 경로부터 전체경로를 다 사용하는 경로값 절대경로 / 상대경로를 구분하는 가장 간단한 방법은 경로의 시작이 '/' 기호로 시작하는지 확인하면 됩니다. ls 관련 옵션 ll & ls -l 리스트를 상세 정보와 함께 출력 동일한 단축 명령어 권한정보, 크기, 소유자, 소유자 그룹, 수정일자 등 확인 가능 ls -a 숨김파일을 포함하..
·백엔드/JPA
자바 스프링 기반 백엔드 개발자라면 꼭 알아야 할 JPA의 기초에 대해서 요약 정리한 글입니다. JPA란 무엇인가? JPA(Java Persistence API)는 자바 진영의 ORM 기술 표준 ORM 이란? ORM(Object-Relational Mapping)은 이름 그대로 객체와 관계형 데이터베이스를 매핑한다는 뜻 ORM 프레임워크는 객체와 테이블을 매핑해서 패러다임의 불일치 문제를 개발자 대신 해결해줌 자바 진영의 대표적인 ORM 프레임워크는 하이버네이트 프레임워크가 있다. JPA 의 대표적인 장점! 지루하고 반복적인 CRUD SQL을 알아서 처리해준다. 객체 모델링과 관계형 데이터베이스 사이의 차이점도 해결해준다. JPA를 사용하는 개발자는 SQL을 직접 작성하는 것이 아니라 어떤 SQL이 실행..
·백엔드/Spring
스프링 부트 테스트 실행 시 업로드 된 파일도 롤백 시점 사라질까?? 스프링 부트 테스트는 @Transactional 을 테스트 케이스에 선언 시 테스트 완료 후 항상 롤백을 하여, 다음 테스트에 영향을 주지 않는다. (물론 rollback false 지정하는 설정이 있음) 하지만 테스트 실행시 생성된 파일은 데이터 롤백 이후에도 그대로 남아있다. 파일 업로드 후 업로드된 파일을 삭제하는 테스트 코드를 작성해보자 먼저 아래를 보면 파일 업로드 테스트를 위한 파일 정보를 저장하는 엔티티가 있다. @Getter @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) @Table(name = "attach_file") public class AttachFile..
dami97
시공의개발자