전체 글(15)
-
[책] 비전공자 백엔드 개발자로서 읽은 책에 대해
단기간에 많은 정보를 얻기 위해 구글 검색으로 접할 수 있는 블로그나 유튜브를 이용하는 초보 개발자들이 많을 것이다. 해당 지식에 대한 공부의 결과물로서 누군가가 올린 글과 영상은 물론 도움이 된다. 나의 경우엔 아무리 많은 블로그와 영상을 봐도 물음표가 끊이지 않았다. 그렇다면 책을 읽어 보자. 비전공자로서 전공자보다 늦게 출발했으면서 오히려 더 길을 돌아가는 것은 아닐지 걱정되기도 한다. 하지만 경험과 노력을 토대로 만들어진 전문가의 개발 관련 서적은 도움이 되리라 확신한다. 아니 확신보단 믿고 싶다. 많지는 않지만 지금 이 글을 쓰는 시점 이전에 읽은 책도 있긴 하다. 하지만 기억에도 희미해졌고 이 기회에 다시 읽고 싶어졌기에, 여기 올리는 글은 2024/07 이후에 읽은 책에 대한 평이다. 1..
2024.07.05 -
[Tip] 자바의 Integer.parseInt()
Integer.parseInt()를 이용해서 String 타입을 int형으로 변환할 수 있다. public class programmers002 { public static void main(String[] args) { Solution002 s=new Solution002(); int answer=s.solution("1234"); System.out.println(answer); }}class Solution002 { public int solution(String s) { int answer = 0; answer=Integer.parseInt(s); return answer; }} 물론 String에 숫자가 아닌 문..
2024.06.28 -
[웹소켓] @EntityListeners를 이용해서 실시간 정보 업데이트
프로젝트를 끝내기 전에 꼭 해보고 싶은 게 있었다. 웹소켓을 이용해서 실시간으로 바뀌는 시스템을 만들어보는 것. 실시간으로 주식 가격이 바뀌듯이, 음식을 주문하면 실시간으로 라이더의 위치를 알 수 있듯이 말이다. 나는 아주 단순하게 유저가 서울로의 여행계획을 작성하고 저장했을 때, 다른 유저의 화면에서 실시간으로 서울로 여행하고자하는 여행객이 +N 증가됐다는 알림? 정보 전달 기능을 구현하고자 한다. @EntityListeners(MyEntityListener.class)public class PlanVO { @Id @GeneratedValue( strategy= GenerationType.SEQUENCE, generator= "plan_seq" ) @Column(name= "plan_no"..
2024.06.26 -
[JPA] N+1 문제? 이렇게 많은 쿼리문이 수행될 줄 몰랐지
N+1 문제에 대해 알지 못했을 때, 한 번의 작업으로 필요 이상의 쿼리문을 작성하는 문제에 대해 인지하지 못하고 있었다. JPA를 다루며 수많은 문제에 직면했고, 조금씩 에러를 해결해 나가면서 N+1 문제를 알게 되자 이번에 처음으로 콘솔 창이 보여준 수많은 쿼리문을 보게 됐다. List p=new ArrayList(); p=this.planService.allUserPlan();@Override public List allUserPlan() { return this.planRepo.findAll(); } DB에 저장된 모든 계획을 가져오기 위해 findAll() 을 이용했다. 그러자.Hibernate: select planvo0_.plan_no as plan_no1_10_, plan..
2024.06.21 -
[JPA] FetchType.EAGER의 남용과 순환 참조 그리고 N+1
# N+1 문제에 대한 해결방안을 다룬 글이 아닙니다. FetchType.EAGER를 남용했다. @OneToMany @ManyToOne 관계를 지정할 때도, 하나의 엔티티 클래스 안에서 EAGER 속성을 여러 번 사용하는 등. 서버 실행 자체가 되지 않는 문제가 발생했다. 단순히 문제를 해결하기 위해 방법을 찾아나섰고 public class MemberVO { @Id private String member_id; @OneToOne(cascade=CascadeType.ALL, fetch=FetchType.LAZY) @JoinColumn(name="chat_no") private ChatVO chatVO; @OneToMany(mappedBy = "memberVO",cascade=Casc..
2024.06.20 -
[JPA] ddl-auto=create 테이블 drop 에러가 난다면
spring.jpa.hibernate.ddl-auto=create create는 테이블을 새로 생성해주고, update는 기존 테이블의 변경 사항을 수정해준다고 단순히 생각했다. 처음에 엔티티를 등록할 때 테이블 생성을 위해 create를 사용한 후 쭉 update 설정을 이용했다. 그러다가 테이블의 변경 사항을 적용하는 과정에서 create 설정을 사용, 에러를 마주하게 됐다. ddl-auto=create 는 기존에 있는 테이블을 삭제하는 작업을 거친 후 새로 생성한다. ddl-auto=create-drop 은 create와 동일하지만 애플리케이션이 종료될 때 테이블을 삭제한다.ddl-auto=update 는 모든 변경사항이 아닌, 새로운 테이블과 컬럼의 변경사항만 반영한다. 기존 컬럼의 타입 변환 ..
2024.06.19