Programming
-
깃허브의 리드미를 여러 번 수정하다가 커밋 기록이 지저분해 보여서 삭제를 하기로 했다. 커밋 기록을 되돌리는 방법으로는 Revert와 Reset이 있다. Revert: 커밋 취소(revert 기록도 history에 누적) Reset: 커밋 삭제(history까지 제거) 이 포스트에서는 커밋 리셋을 진행해보려고 한다. 커밋 리셋 방법 GitHub Desktop을 이용할 건데, 해당 프로그램을 사용하지 않고 작업을 진행할 리포지토리의 로컬 경로에서 터미널을 실행해도 무방하다. 메뉴의 File > Clone Repository 를 선택한 후 가져올 리포지토리의 url을 입력하면 지정한 경로로 프로젝트가 저장된다. 리포지토리를 가져온 것을 확인하면 Repository > Open in Terminal을 실행한다..
[Git] 커밋 리셋하기깃허브의 리드미를 여러 번 수정하다가 커밋 기록이 지저분해 보여서 삭제를 하기로 했다. 커밋 기록을 되돌리는 방법으로는 Revert와 Reset이 있다. Revert: 커밋 취소(revert 기록도 history에 누적) Reset: 커밋 삭제(history까지 제거) 이 포스트에서는 커밋 리셋을 진행해보려고 한다. 커밋 리셋 방법 GitHub Desktop을 이용할 건데, 해당 프로그램을 사용하지 않고 작업을 진행할 리포지토리의 로컬 경로에서 터미널을 실행해도 무방하다. 메뉴의 File > Clone Repository 를 선택한 후 가져올 리포지토리의 url을 입력하면 지정한 경로로 프로젝트가 저장된다. 리포지토리를 가져온 것을 확인하면 Repository > Open in Terminal을 실행한다..
2024.03.06 -
에러 내용 org.hibernate.LazyInitializationException: could not initialize proxy [com.hyunrian.project.domain.Member#1] - no Session at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:165) at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:314) at org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor.intercept(ByteBuddyI..
[JPA] LazyInitializationException 문제 해결하기에러 내용 org.hibernate.LazyInitializationException: could not initialize proxy [com.hyunrian.project.domain.Member#1] - no Session at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:165) at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:314) at org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor.intercept(ByteBuddyI..
2024.03.04 -
슈퍼타입과 서브타입 객체 지향 프로그래밍에는 클래스 간의 상속관계가 있지만, 데이터베이스에는 상속의 개념이 없다. 하지만 슈퍼타입(super type)과 서브타입(sub type)의 모델링 기법이 객체 상속과 유사한 개념을 가진다. 슈퍼타입: 여러 서브타입의 공통 특성을 가지고 있는 엔티티 서브타입: 슈퍼타입의 특성을 상속받은 엔티티 여러 서브타입이 하나의 슈퍼타입을 가질 수 있으며, 각 서브타입은 슈퍼타입에서 정의된 속성 외에도 고유한 속성을 가질 수 있다. 이런 식으로 엔티티 클래스 간의 상속 관계를 설정하면 여러 가지 장점이 있다. 부모 클래스에서 정의한 속성과 메서드를 자식 클래스에서 재사용할 수 있다. 공통된 속성을 하나의 부모 클래스에 정의함으로써 데이터 일관성을 유지할 수 있다. 상속을 통해..
[JPA] 상속관계 매핑하기슈퍼타입과 서브타입 객체 지향 프로그래밍에는 클래스 간의 상속관계가 있지만, 데이터베이스에는 상속의 개념이 없다. 하지만 슈퍼타입(super type)과 서브타입(sub type)의 모델링 기법이 객체 상속과 유사한 개념을 가진다. 슈퍼타입: 여러 서브타입의 공통 특성을 가지고 있는 엔티티 서브타입: 슈퍼타입의 특성을 상속받은 엔티티 여러 서브타입이 하나의 슈퍼타입을 가질 수 있으며, 각 서브타입은 슈퍼타입에서 정의된 속성 외에도 고유한 속성을 가질 수 있다. 이런 식으로 엔티티 클래스 간의 상속 관계를 설정하면 여러 가지 장점이 있다. 부모 클래스에서 정의한 속성과 메서드를 자식 클래스에서 재사용할 수 있다. 공통된 속성을 하나의 부모 클래스에 정의함으로써 데이터 일관성을 유지할 수 있다. 상속을 통해..
2024.02.09 -
오류 내용 및 발생 상황 Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "start_value" not found [42122-214] Entity를 생성하면서 @Inheritance 옵션을 변경했더니 위와 같은 오류가 발생하였다. 사용 중인 버전은 다음과 같다. Spring Boot 3.2.2 Hibernate 6.4.2 H2 2.2.224 해결 방법 찾아보니 H2의 버전이 맞지 않으면 발생하는 오류라고 한다. 이상하게도 나는 H2를 2.2.224 버전 외에 설치한 적이 없는데, H2 콘솔에 `select h2version() from dual;`을 입력해 버전을 확인해 봤더니 1.4.200이 뜨는 것이 아닌가..? 근데 저렇게 입력하지 않아도..
[H2] Column "start_value" not found 오류 해결오류 내용 및 발생 상황 Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "start_value" not found [42122-214] Entity를 생성하면서 @Inheritance 옵션을 변경했더니 위와 같은 오류가 발생하였다. 사용 중인 버전은 다음과 같다. Spring Boot 3.2.2 Hibernate 6.4.2 H2 2.2.224 해결 방법 찾아보니 H2의 버전이 맞지 않으면 발생하는 오류라고 한다. 이상하게도 나는 H2를 2.2.224 버전 외에 설치한 적이 없는데, H2 콘솔에 `select h2version() from dual;`을 입력해 버전을 확인해 봤더니 1.4.200이 뜨는 것이 아닌가..? 근데 저렇게 입력하지 않아도..
2024.02.08 -
ll은 해당 디렉토리 내 파일 목록을 상세히 볼 수 있는 명령어이다. Mac OS의 Terminal에서 사용하려고 하면 command not found가 뜨기 때문에 별도의 설정이 필요하다. 설정 방법 alias를 다음과 같이 설정한다. echo "alias ll='ls -lGaf'" >> ~/.bash_profile source ~/.bash_profile 하지만 이렇게 설정하면 새로운 탭에서 사용하거나, 종료 후 재실행했을 때는 다시 적용 전 상태로 돌아가있기 때문에 Terminal이 실행될 때마다 적용되도록 하는 설정이 추가로 필요하다. echo "source ~/.bash_profile" >> ~/.zshrc 이제 항상 ll 명령어를 사용할 수 있다. 참고 [Linux] zsh: command n..
Terminal에서 ll 사용하기: command not foundll은 해당 디렉토리 내 파일 목록을 상세히 볼 수 있는 명령어이다. Mac OS의 Terminal에서 사용하려고 하면 command not found가 뜨기 때문에 별도의 설정이 필요하다. 설정 방법 alias를 다음과 같이 설정한다. echo "alias ll='ls -lGaf'" >> ~/.bash_profile source ~/.bash_profile 하지만 이렇게 설정하면 새로운 탭에서 사용하거나, 종료 후 재실행했을 때는 다시 적용 전 상태로 돌아가있기 때문에 Terminal이 실행될 때마다 적용되도록 하는 설정이 추가로 필요하다. echo "source ~/.bash_profile" >> ~/.zshrc 이제 항상 ll 명령어를 사용할 수 있다. 참고 [Linux] zsh: command n..
2024.02.03 -
스프링에서는 편의를 위해 제공하는 다양한 애너테이션이 있는데, 그중에서 자주 사용되는 애너테이션을 정리해보고자 한다. 각 애너테이션이 하는 역할을 간단하게 설명할 것이며 지속적으로 업데이트할 예정이다. 스프링 기본 애너테이션뿐만 아니라 자주 사용되는 라이브러리의 애너테이션도 포함한다. Spring MVC `@Controller` 클래스에 적용하면 해당 클래스가 컨트롤러로 사용됨 사용자의 요청을 처리하고 Model을 만들어 View에 전달하는 역할을 수행함 @Controller public class MyController { @GetMapping("/hello") public String helloWorld() { return "hello"; //hello.html } } `@RestController`..
Spring Annotation 정리스프링에서는 편의를 위해 제공하는 다양한 애너테이션이 있는데, 그중에서 자주 사용되는 애너테이션을 정리해보고자 한다. 각 애너테이션이 하는 역할을 간단하게 설명할 것이며 지속적으로 업데이트할 예정이다. 스프링 기본 애너테이션뿐만 아니라 자주 사용되는 라이브러리의 애너테이션도 포함한다. Spring MVC `@Controller` 클래스에 적용하면 해당 클래스가 컨트롤러로 사용됨 사용자의 요청을 처리하고 Model을 만들어 View에 전달하는 역할을 수행함 @Controller public class MyController { @GetMapping("/hello") public String helloWorld() { return "hello"; //hello.html } } `@RestController`..
2024.01.23 -
개요 며칠 전 검증 결과로 에러 메시지를 확인하는 과정에서 API를 사용했을 때 errors.properties를 통해 설정한 메시지가 아닌 디폴트 메시지로 나오는 것을 발견했다. 오류 메시지를 처리하는 과정이 각각의 응답 방식(타임리프와 Json 등)에 차이가 있기 때문이었다. 이번 포스트에서는 이전 글에 이어서 스프링이 오류 메시지를 처리하는 방식에 대해 간단히 알아보고자 한다. 이전글: https://hyunrian.tistory.com/84 Bean Validation - 검증 기능 사용 방법 Bean Validation이란? 회원가입 등 특정 필드에 대한 검증 로직을 모든 프로젝트에 적용할 수 있도록 표준화 한 것으로, 애너테이션을 사용하여 쉽게 검증 기능을 구현할 수 있다. 여기에서 다양한 h..
[Spring Boot] MessageSource - 오류 메시지 처리 방식개요 며칠 전 검증 결과로 에러 메시지를 확인하는 과정에서 API를 사용했을 때 errors.properties를 통해 설정한 메시지가 아닌 디폴트 메시지로 나오는 것을 발견했다. 오류 메시지를 처리하는 과정이 각각의 응답 방식(타임리프와 Json 등)에 차이가 있기 때문이었다. 이번 포스트에서는 이전 글에 이어서 스프링이 오류 메시지를 처리하는 방식에 대해 간단히 알아보고자 한다. 이전글: https://hyunrian.tistory.com/84 Bean Validation - 검증 기능 사용 방법 Bean Validation이란? 회원가입 등 특정 필드에 대한 검증 로직을 모든 프로젝트에 적용할 수 있도록 표준화 한 것으로, 애너테이션을 사용하여 쉽게 검증 기능을 구현할 수 있다. 여기에서 다양한 h..
2024.01.20 -
H2 데이터베이스의 두 가지 모드 H2 데이터베이스는 서버 모드(Server Mode)와 내장 모드(Embeded Mode) 중 하나로 선택하여 사용할 수 있다. 그중 Embeded 모드는 H2 DB를 애플리케이션 내부에 포함시켜 사용하는 모드로, 애플리케이션과 함께 실행되는 내장 데이터베이스로 활용된다. 애플리케이션이 종료되면 Embeded 모드로 동작하는 H2 DB도 함께 종료되고, 데이터도 함께 사라진다. Embeded 모드를 사용하면 별도의 서버 프로세스를 실행할 필요가 없고, DB 파일이나 인메모리 DB를 사용하여 간단하게 데이터를 저장하거나 검색할 수 있다. 테스트의 필요성과 고려사항 소프트웨어 개발에서 테스트는 매우 중요한 단계다. 코드에서 발생할 수 있는 버그를 조기에 발견하여 수정할 수 ..
[Spring Boot] Embeded Mode로 테스트 하기 (feat. H2 Database)H2 데이터베이스의 두 가지 모드 H2 데이터베이스는 서버 모드(Server Mode)와 내장 모드(Embeded Mode) 중 하나로 선택하여 사용할 수 있다. 그중 Embeded 모드는 H2 DB를 애플리케이션 내부에 포함시켜 사용하는 모드로, 애플리케이션과 함께 실행되는 내장 데이터베이스로 활용된다. 애플리케이션이 종료되면 Embeded 모드로 동작하는 H2 DB도 함께 종료되고, 데이터도 함께 사라진다. Embeded 모드를 사용하면 별도의 서버 프로세스를 실행할 필요가 없고, DB 파일이나 인메모리 DB를 사용하여 간단하게 데이터를 저장하거나 검색할 수 있다. 테스트의 필요성과 고려사항 소프트웨어 개발에서 테스트는 매우 중요한 단계다. 코드에서 발생할 수 있는 버그를 조기에 발견하여 수정할 수 ..
2024.01.16