반응형

전체 글 706

[spring] 의존성 주입 시 NPE(NullPointerException)

목차 spring에서 의존성 주입 시 자주 발생하는 실수이다.(나다, 내가 그렇다.) 위 코드에서 어디가 잘못 되었을까? 무엇 때문에 NPE가 발생하는 것일까? 콘솔에서 친절하게 라인까지 알려주고 있다. 31번 째 라인으로 가보자 그냥 board 테이블에 있는 리스트를 페이징해서 가져오는게 전부다. 원인을 몰랐을 땐 DB에서 가져오는게 null인가? 이런 생각을 했었는데.. 하지만 아래 코드에서는 생성한 list를 조작하는 일이 전혀 없다.(list에서 get해서 뭘 가져온다거나) 근데 왜 널포인터일까? 디버거로 찍어보자 boardService가 null이다. 이놈의 객체가 생성 안된거다. BoardController에서 BoardService라는 놈을 생성자 주입해서 쓰려고 하는데 이 객체가 null이..

IT/development 2022.11.23

[MySQL/MariaDB]'테이블명' doesn't exist

목차 테이블이 있는데 테이블이 없다고 나오는 경우 여러이유가 있을 수 있지만 대소문자 구분하는지 확인해 볼 필요가 있음 윈도우는 기본적으로 대소문자 구분이 없이 mariadb가 설치 되지만 리눅스는 대소문자 구분해서 설치하는 경우가 있음 mysql 계정으로 접속 후 아래의 쿼리를 보낸 후 값을 확인해야 함 show variables like 'lower_case_table_names'; 쿼리 질의 값이 0인 경우 대소문자를 구분, 1인 경우 대소문자 구분안하는 걸 의미 만일 0으로 되어 있으면 1로 변경 vi로 /etc/my.cnf을 열어서 [mysqld]안에 lower_case_table_names = 1를 넣어줌(경로는 다를 수 있음) 그 후 mariadb or mysql 서비스 재시작

IT/DBMS 2022.11.23

[MySQL/MariaDB] 테이블/테이블 목록 조회

목차 Mysql/MariaDB 테이블 조회 information_schema DB를 활용(절대 information_schema의 정보를 수정하면 안됨) Mysql 혹은 MariaDB의 메타데이터 정보를 담고 있는 information_schema를 활용해서 다양하게 사용 가능(빈 테이블 조회 등) -- 빈 테이블 조회 SELECT TABLE_NAME AS 테이블명, table_comment AS 코멘트, table_rows AS 행 FROM information_schema.tables WHERE table_schema = '스키마명'AND table_rows

IT/DBMS 2022.11.23

[springBoot] JPA @Entity에서 @NoArgsConstructor, @AllArgsConstructor, @Builder... 사용 관련 정리

목차 개인 프로젝트 에서 단순 CRUD는 JPA로 구현하려고 많이 하고 있다. 역시 미래의 내가 보기위해 기록한다. 부끄럽지만 java8, JPA를 최근에 사용하게 되어서 @Builder 어노테이션도 처음 써보고 이제 막 적응이 살짝 되가는 중이다.(JPA에서는 엔티티에 setter 사용을 최대한 지양한다.) @Entity에서 필요로 하는 것은 기본 생성자이고 @Builder에서 필요로 하는 것은 모든 필드를 전부 매개변수로 가지고 있는 생성자이다.(값 세팅하기 위해서) 둘 다 생략할 경우 IDE에서 친절하게 아래처럼 에러를 뱉어준다.(엔티티에 기본 생성자 없을 경우엔 컴파일 단계에서 표시) 빌더에 매개변수 생성자 없을 경우 빌드시 표시해준다. Entity에서 @NoArgsConstructor 생략 시 ..

IT/development 2022.11.22

[mybatis] mybatis 동적 쿼리 작성 시 "," 관련

목차 사소할 수 있지만 이유를 몰라서 쿼리 작성 시 에러 때문에 시간을 잡아 먹어서 역시나 미래의 내가 보기위해 기록한다. 예를 들어 위와 같은 쿼리가 있을 때 parameter값에 따라 동적으로 SQL을 생성 시 SELECT문 컬럼 뒤쪽에 ","를 넣으면 문법에러가 발생한다. 넘어온 member_id값이 있으면 , mcm.etc가 붙는 데 만일 위의 쿼리가 아래와 같다면 동적 쿼리를 붙이질 못한다. select m.*, mcm.tag_type, mcm.tag_name, mcm.etc FROM member m LEFT OUTER JOIN member_code_mapping ON m.member_seq = mcm.member_seq LIMIT #{start}, #{length} 이 경우는 넘어온 membe..

IT/development 2022.11.22

[MySQL/MariaDB] Column 'xx' in where clause is ambiguous 에러

목차 Column 'xx' in where clause is ambiguous 에러 SQL에서 테이블 2개를 조인 했는데 아래처럼 사용해서 그렇다.(아래는 예시 SQL임) SELECT m.mem_seq , tg.tag_type , tg.tag_name FROM member m LEFT OUTER JOIN member_tag_mapping mtm ON m.mem_seq = mtm.mem_seq LEFT OUTER JOIN tag tg ON mtm.tag_seq = tg.tag_seq where mem_seq = 1244 member테이블이 다른 테이블 조인을 위해 별칭을 줬는데 WHERE절의 mem_seq는 별칭을 통해 접근한 필드가 아니라서 그렇다. 아래처럼 m.mem_seq라고 해야 정상적으로 조회가 ..

IT/DBMS 2022.11.22

[Spring] spring REST API 공부(feat. @RestController)

목차 REST란? 😎 REST란 "Representational State Transfer"의 약자이고 직역하면 대표상태 전송이다. 하나의 URI는 고유한 리소스를 대표하도록 설계된다는 개념인데 솔직히 아직 정확히 이해하지는 못했다. 웹의 모든 리소스에 고유한 URI로 의미부여 한 뒤 HTTP Method를 통해 상태를 주고 받으며 통신하는 방식이라고 이해 했다. 그리고 서버에서 클라이언트로 반환하는 값이 순수한 데이터라는 점 클라이언트가 URI만 봐도 이게 무슨 작업을 의미하는지 알 수 있도록 설계해야 한다. ex)localhost:8080/user가 URI이고 POST으로 서버에 전송한다고 하면 사용자 등록이라고 유추할 수 있다. REST 방식에서는 HTTP Method가 CRUD를 의미한다. 그래서..

IT/development 2022.11.22

[springBoot] 유효성 검증(feat. @Valid, Validated)

목차 SpringBoot 유효성 검증 😄 클라이언트에서 넘어온 값들에 대한 유효성 검증이 필요한데 if(id != null || id != ""...) 이렇게 if문으로 유효성 체크를 하기 싫어서 자바나 스프링에서 지원하는 좋은게 어디 없나 보다가 구글링을 하고 @Valid와 @Validated를 알게되어서 적용을 해봤고 이를 기록한다. 난 "", " ", null 이렇게 3개만 체크하면 되는 부분이었다. 결론은 스프링부트에선 @Valid와 @Validated 2개를 사용해서 간단한 유효성 체크를 할 수 있음 @Valid 🥰 @Valid는 JSR-303 Bean Validator를 이용해서 유효성을 체크하는 어노테이션임(자바 표준 스펙) 사용법 스프링부트 버전에 따른 의존성 추가 사용하는 스프링 부트 버..

IT/development 2022.11.22

[MySQL/MariaDB] merge(값이 있으면 update, 아니면 insert)(feat. ON DUPLICATE KEY UPDATE...)

목차 MySQL INSERT INTO...ON DUPLICATE KEY UPDATE... 😃 mysql에도 Oracle의 merge into와 같은 기능이 있다는 걸 알게되어 미래의 내가 보기위해 기록함 테스트를 위해 테이블 하나 생성 CREATE TABLE `test_220714` ( `id` bigint(20) NOT NULL, `name` varchar(10) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 테스트 데이터를 2개 정도 입력 INSERT INTO test_220714(id, name)VALUES(1, 'ironMan'); INSERT INTO test_220714(id, name)VALUES(2, 'th..

IT/DBMS 2022.11.22
반응형