안녕하세요. 개발하다가 너무 datagrip의 인터페이스로 제공되는 ddl을 많이 사용하는 것 같아서 개인적으로 스키마를 sql only로 처리하려고 노력하고 있는데..(누군가는 필요없다고 생각할 수 있지만 개인적인 챌린지입니다!) mysql보단 postgresql을 많이 사용했다보니 개인 프로젝트 할 때 mysql의 테이블을 수정하거나 컬럼을 수정할 때 자주 찾아보게되는 것보다 제 블로그에 정리해놓는 것이 더 좋을 것 같아서 이를 정리하고자 합니다. 먼저 예제로 사용할 테이블을 만들어 보겠습니다. 테이블 생성 create table room( seq bigint primary key, type varchar(100), status varchar(100) ); 단순한 구조의 예제 테이블을 생성했습니다. ..
안녕하세요. 오늘은 스프링 프레임워크를 사용할 때, 반드시 숙지해야되는 개념인 DI(Dependency Injection), 의존주입에 대한 이야기를 진행해보려고 합니다. 우선 DI라는 개념은 스프링에만 존재하는 개념은 아닙니다. 기존에 다른 프레임워크에서부터 발전해온 개념으로 IOC를 구현하기 위해 사용되던 방법으로 DI를 써왔는 흐름으로 알고 있습니다. 따라서 Spring에서 봤던 DI와 기존 DI간의 매치가 아직 안되신분들이 있을 것 같아서 그것부터 바로잡아 보겠습니다. Dependency Injection 우선 기존의 의존주입을 보기전에, 의존이라는게 어떤 것인지부터 알아야합니다. Spring MVC를 토대로 개발을 해왔던 분이시라면 충분히 아시겠지만 다시 정리하는 차원에서 의존이란 아래의 코드를..
최근 프로그래머스 백엔드 데브코스 혹은 간혹 개발자 고민상담 관련 이메일을 받다보면 많이 받는 질문중에 하나입니다. 데브코스의 경우에는 제가 직접 대화하면서 코드리뷰도 해주고 있으니까 그렇게 어렵지 않게 저의 메시지를 전달할 수 있지만 이메일로 전달받게되는 경우 제가 모르는 블랙박스 영역이 너무 많다보니 가끔 메시지가 잘못 전달되는 경우도 있었을 것 같아요. 다만 저는 해당 질문을 하는 심경과 듣고 싶은 답은 정해져 있다고 생각이 들어요. 자신 있는 사람은 나는 자신이 있고 준비가 되었으니까 얼른 취업전선에 뛰어들어서 원하는 목표를 쟁취하고 싶다! 이런 생각이 대부분일 것이고 그걸 확인하는 답변을 듣고 싶은 거겠지요. 자신 없는 사람은 용기의 답변을 듣고 싶거나 실제로 자신의 부족한 부분을 채워가고 싶은..
2022년 8월 26일 인프런 컨퍼런스에 다녀와서 벨로그를 개발하신 벨로퍼트님의 발표세션을 들었습니다. 개발 블로그를 쓰고 있는 사람으로써 혹은 컨텐츠를 만드는 사람으로써 들어보면 좋을 것 같았습니다. 아무래도 전체 인프콘의 타겟층 자체가 취준생 혹은 저연차 주니어에 초점을 맞춰지다보니 강연 내용이 전체적으로 어려운 아키텍쳐를 다룬다기보다는 모든 개발자들에게 인사이트를 줄 수 있을만한 자연스러운 혹은 현실적인 개발 아키텍쳐에 초점이 맞춰있었다고 생각이 들었습니다. 이처럼 벨로퍼트님의 셀프브랜딩 강연도 마찬가지로 다소 가볍게 준비하셨던 느낌이 들었고 본인께서도 발표당시 떨리지 않는다고 하셨으니 이미 수십 수백번은 전달했던 내용이 아닐까 생각합니다. ㅎㅎ 모든 블로그를 준비하는 개발자 혹은 컨텐츠를 준비하는..
Mybatis 관련 예제를 작성하던 중 class 이름을 변경해야하는 일이 있었습니다. 저는 익숙하게 인텔리제이의 기능을 활용하여 (Shift + F6) 클래스를 수정했는데.. 관련 클래스가 어디엔가 String 타입으로 선언되어 있다면.. 해당 클래스 이름도 바꿀지 말지에 대한 창이 나옵니다. 무심코 아니요를 눌렀고.. 테스트 코드를 돌렸더니 아래와 같은 에러메시지가 나왔다. Caused by: org.apache.ibatis.type.TypeException: Could not resolve type alias 'co m.xxx.xxx.XXXApplication.Test'. Cause: java.lang.ClassNotFoundException: Cannot find class: co m.xxx.xx..
안녕하세요. 오늘은 MyBatis에서 여러건의 Record를 삽입하기 위해서 쓸 수 있는 태그에 대해 공유하고자 합니다. 우선 insert 쿼리문을 보면 INSERT INTO ROOM(type, deal_type, status) VALUES ('원룸', '월세', '광고중'); 이런 형태로 native 쿼리를 작성해야 할텐데요. JPA 처럼 saveAll() 기능을 제공하게 된다면 매우 편하게 삽입작업을 할 수 있겠지만 MyBatis는 쿼리문을 직접 작성하기 때문에 List의 갯수만큼 insert mapper를 호출하거나 해야했을 것입니다.(이렇게 썻다면 정말 안타까운 상황이네요ㅠㅠ) 예컨데 v1 public class Service { public void addRoom(String type, Stri..
native 쿼리를 직접 작성하는 JDBCTemplate이나 MyBatis 같은 기술은 항상 쿼리문을 직접 관리해야한다는 안좋은 단점이 있다. 물론 특정 DBMS에 맞는 native Query를 직접 작성하는 이점으로 각 쿼리마다 최적화할 수 있다는 장점이 있지만 한두개정도이지 임계점이 넘어가게되면 부담이 될 수밖에 없다. 그 중에서 중복으로 사용되는 조건이나 복잡한 다이나믹 쿼리 조건이 여러 쿼리에서 동시에 사용해야될 경우 xml 쿼리 파일의 용량은 그 배수만큼 커질 것이다. (예를 들어, 페이징의 경우 where절 로직은 메인 Select 문과 count 문의 조건이 limit offset을 제외하고 동일해야한다.) 뭐 예를 들면, 아래와 같다. 다방에서 매물 목록을 조회하는 페이징 API를 호출한다..