본문 바로가기

BackEnd-Study13

[ORACLE] union all로 조인한 테이블 특정 데이터 값 수정 SELECT * FROM ( SELECT TMP_PAGE.*, ROWNUM ROW_ID FROM ( SELECT ARCH_TYPE, CLASS_TYPE, COUNT, REG_DT FROM ( SELECT TO_CHAR(a.REG_DT, 'YYYY-MM-DD') AS REG_DT , (SELECT CODE_NAME FROM ARCH_CODE_TBL WHERE P_ID = 'ARCH_TYPE' AND CODE_ID = a.ARCH_TYPE) AS ARCH_TYPE, (SELECT CODE_NAME FROM ARCH_CODE_TBL WHERE P_ID = 'TYPE' AND CODE_ID = a.CLASS_TYPE) AS CLASS_TYPE, COUNT(1) AS COUNT FROM ARCH_INFO_TBL .. 2024. 10. 29.
[ORACLE] 하나의 테이블에 두개의 기본키 이번 프로젝트에서 설문조사라는 파트를 맡아서 개발을 했었다. 첨에 이 부분이 상당히 복잡하고 어려웠다.ㅠㅠ우선 테이블은 3개가 연결되어있다. TOLL_INFO_TBL TOLL_DETAIL_TBLTOLL_RESULT_TBL간단하게 설명하자면 TOLL_INFO_TBL은 설문 포맷의 질문에 관련된 내용이 들어가고TOLL_DETAIL_TBL은 해당 질문에 대한 답변 항목들, 그리고 답변 유형 관련된 내용이,TOLL_RESULT_TBL은 어떤 답변을 선택하였는지에 대한 내용이 들어있다.세개의 테이블에는 TOLL_ID로 연결되어 있다. 기존 정상적으로 작동이 되었는데 DB 설정을 다시 하면서 TOLL_DETAIL_TBL 에서 에러가 났다.무결성 에러가 나서 확인해보니 기존 TOLL_DETAIL_TBL에는 TOLL_.. 2024. 10. 28.
@RequestBody, @RequestPart, @RequestParam, @ModelAttribute spring boot를 사용하면서 저는 대부분 @RequestBody 어노테이션을 사용하였습니다.bean을 적극적으로 활용하고 있었기 때문에 @RequestBody를 사용하면 http 요청으로 넘어오는 body 내용이 매핑이 되기 때문입니다.하지만 이후 등록 페이지를 개발하는 도중 이미지와 파일을 저장 해야하는 경우가 발생하였습니다.이미지와 파일을 넘겨줄 때 어떤 어노테이션을 사용해서 데이터를 받을까 구글링을 해본 결과생각보다 다양한 어노테이션이 있었습니다.  1. @RequestBody HTTP 요청으로 넘어오는 body 내용을 HttpMessageConverter를 통해 JavaObject로 역직렬화한다.multipart 요청이 아닌 어떤 바이너리 파일을 포함하고 있지 않은 데이터를 받는 역할을 한다.. 2024. 10. 23.
[Oracle] COMMIT, ROLLBACK COMMIT모든 자업을 정상적으로 처리하겠다고 확정하는 명령어.트랜잭션의 처리 과정을 데이터베이스에 반영하기 위해서, 변경된 내용을 모두 영구 저장한다.COMMIT을 수행하면, 하나의 트랜잭션 과정을 종료하게 된다.TRANSACTION(INSERT, UPDATE, DELETE) 작업 내용을 실제 DB에 저장한다.이전 데이터가 완전히 UDPATE된다.모든 사용자가 변경한 데이터의 결과를 볼 수 있다. ROLLBACK작업 중 문제가 발생했을 때, 트랜잭션의 처리 과정에서 발생한 변경 사항을 취소하고, 트랜잭션 과정을 종료시킨다.트랜잭션으로 의한 하나의 묶음 처리가 시작되기 이전의 상태로 되돌린다.TRANSACTION(INSERT, UPDATE, DELETE)작업 내용을 취소한다.이전 COMMIT 한 곳까지만.. 2024. 4. 29.
List, Set, Map 차이점 List : 순서가 있으며, 데이터(값) 중복 허용 Set : 순서가 없으며, 데이터(값) 중복을 허용하지 않음 Map : Key&Value 구조, Key는 중복을 허용하지 않으며, Value는 중복을 허용 Collection - Java에서 Collection이란 데이터의 집합, 그룹을 의미 - JCF(Java Collection Framework)는 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합을 의미 Collection 주요 인터페이스 - List, Set, Map 1. List - 입력 순서를 유지하며, 데이터 중복을 허용 - 인덱스를 통해 저장, 데이터에 접근 가능 List 인터페이스의 주요 구현체 - ArrayList - 단방향 포인터 구조 - 데이터 .. 2024. 4. 8.
[MyBatis] resultMap resultMap은 결과를 매핑하는데 사용된다.resultMap은 쿼리 결과를 자바 객체에 매핑하는데 도움이 되는 구성요소이다. 예를들어, 데이터 필드가 clob인 데이터는 resultMap을 통해 String으로 매핑시킬 수 있다. 기능1. 쿼리 결과를 매핑하기 위한 매핑 정보를 정의한다.2. 쿼리 결과에서 데이터를 추출하고 이를 자바 객체의 필드에 할당한다.3. 쿼리 결과를 매핑하여 자바 객체의 인스턴스를 생성한다.   cashingClob은 resultMap의 식별자이며 이는 mybatis 설정 파일에 정의된 resultMap의 이름이다.  resultMap에 cashingClob이라 적으면 해당 select문의 쿼리결과를 cashingClob의 규칙에 따라 매핑된다. 2024. 4. 3.
Oracle에서 시퀀스(Sequence) 사용하기 아무래도 이번 프로젝트를 진행하면서 백엔드 쪽을 배우고 있기 때문에 많이 서툴다. 데이터를 다룰 때, 각 데이터의 고유 ID가 있다.부장님이 시퀀스를 이용하라고 하셔서 이것에 대해 기록하고자 한다.  오라클에서는 자동 증가 컬럼을 사용할 수가 없다. 다른 DB에는 컬럼 자체에 해당 옵션이 있다고 한다.하지만 오라클에서는 없기 때무에 컬럼의 값을 증가시키기 위해서는 MAX(컬럼) + 1 또는 시퀀스를 사용하여 일련번호를 부여해야한다.     SELECT arch_info_seq.CURRVAL FROM DUAL  그리고 마이바티스에서 사용할 땐 위와 같이 먼저 작성해주고 아래에 insert문을 작성한다.insert문을 작성할 때 id값으로 arch_info_seq.nextval이라고 작성해준다. 시.. 2024. 4. 3.
[MyBatis] WHERE 1=1 SELECT id, username, nicknameFROM member_testWHERE 1=1 AND username = #{username} AND nickname = #{nickname}  위의 쿼리에서 username과 nickname에 null이 들어오면 전체 데이터를 조회한다.전체 조회가 된다는 사실을 의도하지 않거나 예상하지 못한다면 데이터 양에 따라 어플리케이션 응답 지연 문제 등이 발생할 수 있다. 만약 쿼리가 DELETE 혹은 UPDATE였다면 전체 데이터가 변하는 상황이 발생할 수도 있다.  WHERE 1=1 피하기구글링을 해본 결과 위와 같은 이유로 여러 블로그에서 WHERE 1=1을 사용하는 것에 대해 피하자는 글들이 많았.. 2024. 4. 3.
[springboot, mybatis] pagination 프론트에서 page와 size를 넘겨주고 백엔드에서 해당 값들을 받을 때 mybatis에서는 #{} 이런식으로 기재한다.그리고 parameterType이 kr.library.ar.common.app.ble.bean.UserBleBean이라고 지정해주었기 때문에 해당 bean에 page와 size를 추가해준다.여기서 이렇게 bean으로 타입을 주면 계속해서 bean에 추가를 해야해서 map을 만들고 map에 추가하는 방법도 있다고 말씀해주셨다.   SELECT * FROM ( SELECT TMP_PAGE.*, ROWNUM ROW_ID FROM ( ) TMP_PAGE) PAGE WHERE ROW_ID #{endRow}.. 2024. 4. 3.
CLOB LOB 데이터 타입 데이터 타입설명 CLOB 문자형 대용량 객체 / 고정길이와 가변길이 문자집합 지원 NCLOB 유니코드를 지원하는 문자형 대용량 객체 BLOB 이진형 대용량 객체 BFILE 대용량 이전 파일에 대한 위치, 이름 저장 LOB이란 Large Object의 약자로 대용량 데이터를 지정할 수 있는 데이터 타입이다. 일반적으로 그래픽, 이미지, 사운드 등 비정형 데이터를 지정할 때 L,OB 타입을 사용한다. 문자형 대용량 데이터는 CLOB, NCLOB 그래픽, 이미지, 동영상 등의 데이터는 BLOB을 사용한다. 2024. 3. 30.
char varchar varchar2 차이 char 고정된 문자열 저장하는데 사용 (고정된 길이 가짐) 테이블 만들 때 무조건 고정된 길이 지정해줘야하고 범위는 1~2000 bytes 고정된 길이보다 작은 길이 문자 넣어도 남은 부분 공백으로 채움 만약 더 큰 길이 입력하게 되면 db는 에러를 반환함 varchar, varchar2 가변 길이로 문자열을 저장할 수 있는 데이터 타입 varchar2로 만들면 1 ~ 4000byte 길이 지정해줄 수 있음 char와의 차이점이라면 우리가 선언한 문자열보다 더 짧은 문자열 넣으면 char는 공백으로 매꾸지만 varchar와 varchar2는 그렇지 않음 varchar2를 사용하면 메모리상 이점을 얻게 됨 varchar, varchar2 차이점 실제로 오라클 공식 문서에는 두 타입이 synoymous, .. 2024. 3. 30.
스프링 컨테이너와 Bean Bean 스프링 컨테이너에 의해 관리되는 재사용 가능한 소프트웨어 컴포넌트입니다. 스프링 컨테이너가 관리하는 자바 객체를 뜻하고 하나 이상의 빈을 관리합니다. 스프링 컨테이너는 BeanFactory 와 ApplicationContext 두 종류의 인터페이스로 구성되어 있습니다. BeanFactory는 스프링 컨테이너의 최상위 인터페이스입니다. 주로 빈을 등록, 생성, 조회 등의 빈을 관리하는 역할을하며, getBean()메서드를 통해 빈을 인스턴스화할 수 있습니다. @Bean 어노테이션이 붙은 메서드의 이름을 스프링 빈의 이름으로 사용하여 빈을 등록합니다. ApplicationContext 는 BeanFactory의 기능을 상속받아 제공합니다. 따라서, 빈을 관리하고 검색하는 기능을 BeanFactory.. 2024. 3. 15.
객체지향 프로그래밍 객체지향 프로그래밍 (Object Oriented Programming) 로직(변수, 메서드)을 상태(state)와 행위(behave)로 이루어진 객체로 만드는 것. => 로직을 서로 연관되어있는 기능별로 그룹핑하는 기능을 프로그래밍 차원에서 제공하게 되는 것 => 그룹핑된 하나하나의 단위들을 객체라고 한다. 이후 다른 곳에서도 재활용 가능. 은닉화, 캡슐화 내부 동작 방법을 단단한 케이스(객체) 안으로 숨기고 사용자에게는 부품의 사용방법(메서드)만을 노출. ex) 모니터가 어떻게 동작하는지 몰라도 컴퓨터와 모니터를 연결하는 방법만 알면 화면을 표시할 수 있는 것 => 객체가 어떻게 생겼느지 몰라도 객체를 사용할 수 있도록 하겠다. 인터페이스 잘 만들어진 부품이라면 부품과 부품을 서로 교환할 수 있어야 .. 2024. 3. 5.
728x90