전체 글

하루 한권 책으로 떠나는 개발여행
[1] 프로젝트 준비 들어가며 프레임워크나, 언어, DB등을 이론적로 공부를 하고난후에 한번 토이 프로젝트를 통해서 실습을 해보고싶었다. 그래서 이번에 간단한 CRUD를 통해 게시판을 만들어봤다. 혼자서 기획하고 코드를 작성했기 때문에 이상하거나 오류가 날수있습니다.. 그런 부분은 댓글을 통해 공유해주시면 감사하겠습니다. 프로젝트환경 springboot -version : 2.7.17 bulid : gradle java -version : 11 DB : Mysql_8.0.33 IDE : IntelliJ _Ultimate OS : Windos pro 구현할 내용 회원가입 게시판을 만드는 목적이므로 이름,비밀번호만 입력하면 회원가입(검증 X) 로그인 회원가입한 정보를 바탕으로 로그인 로그아웃 게시판 글쓰기 ..
· 오류관련
오류해결... 1시간의 삽질... 간단한 게시판의 댓글 기능을 구현하는 도중 스택오버플로우가 발생했다... 수정전 Board @Entity public class Board { ... @OneToMany(mappedBy = "board") private List comments = new ArrayList(); } Comment @Entity public class Comment { ... @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "board_Id") private Board board; } 이런식으로 엔티티를 설계한 후에 DTO로 통해 값을 json 형식으로 전달받아서 db에 저장을 하려고 했지만.. 처음 만나보는.. 딱하고 스택오버플로우가 발생한..
컨테이너란 컨테이너란? 도커 컨테이너는 마치 화물선에 적재되는 컨테이너와 유사한 개념입니다. 이 컨테이너 안에는 애플리케이션과 해당 애플리케이션을 실행할 데 필요한 모든 구성 요소가 함께 담겨 있습니다. 그림 1과 같이 도커는 가상의 리소스를 만들어낸 것을 컨테이너라고 합니다. 각 컨테이너는 내부의 정보에 접근할 수 있지만 외부의 정보는 알 수 없는 격리된 상태에 있습니다. 더불어, 여러 개의 컨테이너를 생성하여 각각을 독립적인 환경으로 구성할 수 있습니다. 이로써 도커는 각 컨테이너가 자체적인 실행 환경을 갖고 있는 가상화 기술을 제공하며, 애플리케이션을 효율적으로 관리하고 배포할 수 있게 됩니다. 그림 2처럼 도커를 통해 한 컴퓨터에서 여러 개의 컨테이너를 생성하여 각 컨테이너가 독립적으로 정보를 가..
배포하기 들어가며 프로젝트를 만들고 나서 도커를 통해서 배포하는 법을 알아보자. (mysql을 사용했을 경우.) 프로젝트환경 springboot -version : 2.6.3 bulid : gradlejava -version : 11 DB : Mysql_8.0.33 IDE : IntelliJ _Ultimate Docker : 24.0.7 도커준비 사용할 컴퓨터에 도커가 설치가 되어있는지 확인한다. (cmd 보다는 powershell을 사용하기를 권장.) docker --version 도커파일 작성 Dockerfile FROM adoptopenjdk:11-jre-hotspot WORKDIR /app COPY build/libs/security-0.0.1-SNAPSHOT.jar /app/login.jar E..
· JPA
OSIV란 OSIV OSIV(open session in View)는 영속성 컨텍스트를 뷰까지 열어준다는 의미이다. OSIV는 하이버네이트에서 사용하는 용어이고 JPA에서는 OEIV라고 하지만, 관례상 OSIV라고 부른다. OSIV 사용이유 OSIV(Open Session In View)를 사용하면 트랜잭션의 범위가 뷰까지 확장되어 영속 상태가 유지됩니다. 기본적으로 JPA에서는 트랜잭션 내에서 엔티티를 관리하고, 트랜잭션이 종료되면 영속성 컨텍스트가 닫혀 엔티티는 준영속 상태가 됩니다. 그러나 OSIV를 사용하면 트랜잭션을 뷰까지 확장하여 영속성 컨텍스트를 닫지 않고 유지합니다. 이는 컨트롤러나 뷰에서도 영속 상태의 엔티티를 유지하고 조회, 수정할 수 있게 됩니다. 따라서 뷰나 컨트롤러에서도 지연 로딩..
· JPA
JPA 값 타입 이란? 들어가며 값 타입은 기본적으로 3가지로 나눌수있다. 기본값 타입 자바 기본타입( int ,double) 래퍼 클래스(Integer) String 임데디드타입 컬렉션 값 타입 기본값 타입은 기본적으로 자바에서 제공하는 타입이다. 임베디드 타입은 JPA에서 직접 정의한 값 타입이다. 컬렉션 타입은 하나이상 값 타입을 저장할때 사용된다. ※ Lombok을 사용하여 작성함 기본값 타입 기본값 타입은 Entity 클래스를 만들때 기본으로 만들때 사용하는 타입이다. @Entity @Data public class Member { @Id private Long id;// 기본값 타입 private String username;// 기본값 타입 } 임베디드 값 타입 임베디드 값타입은 사용자가 직..
· JPA
프록시와 연관관계 관리 프록시 이런 엔티티가 있다고 해보자 public void printMemberName(String memberId){ Member member = em.find(Member.class, memberId); System.out.println("회원 이름: "+member.getUsername()); } Member에서 username을 가져올때 Team의 객체까지 가지고와서 회원이름이 출력이된다. 이런 방식은 매우 효율적이지 않은 방식이다. 하지만 JPA는 엔티티가 실제 사용될 때까지 데이터베이스 조회를 지연시키는 지연 로딩을 제공한다. 그럼 지연 로딩을 사용하려면 실제 엔티티 대신에 가짜 객체가 필요한데 가짜 객체를 프록시 객체라고한다. 프록시 기초 Member member = e..
· MySQL
사용자 및 권환 관리하기 사용자 식별 MySQL의 사용자는 다른 DMBS와는 조금 다르게 사용자의 계정뿐만 아니라 사용자의 접속지점(클라이언트가 실행된 호스트명이나 도메인 또느 IP주소)도 계정의 일부가된다. 따라서 계정을 언급할때는 아이디와 호스트를 함께 명시해야 한다. 다음과 같이 sql_id 라는 아이디로 접속할때만 사용할수 있는계정이다. 다른 사용자가 다음과 같은 계정만 등록돼 있다면 다른 컴퓨터에서는 sql_id 라는 아이디로 접속 할수 없다. 'sql_id'@'127.0.0.1' 다음과 같이 서버에 동일한 계정이 있을때 어떤것을 선택할까? 1. 'sql_id'@'192.168.0.10' (비밀번호 123) 2. 'sql_id'@% (비밀번호 0000) 인증을할때 범위는 가장 작은 것부터 사용하..
코드기록사
A steady developer