본문 바로가기

반응형

전체 글

[개발 노트] 개발 노트 총정리 목차 – Java·Spring, 서버·보안, JavaScript·jQuery, Node.js 모아보기 개발 노트 카테고리의 글을 분야별로 모았습니다. 글 제목을 누르면 해당 글로 이동합니다. 새 글을 올릴 때마다 이 목차도 함께 갱신합니다.Oracle SQL 글(13편)은 Oracle 실무 쿼리 총정리 목차에 따로 정리했고, 이 목차에는 개발과 이어지는 글만 함께 소개합니다. 엑셀 글은 엑셀 함수·기능 총정리 목차를 보세요.1. 이럴 땐 이 글하고 싶은 것볼 글Spring Boot에서 MyBatis로 Oracle을 연결하고 싶다Spring Boot + MyBatis + Oracle 연결예외가 났는데 데이터가 저장돼 있다 (롤백이 안 된다)@Transactional 제대로 쓰기화면에 엑셀 다운로드·업로드 기능을 만들고 싶다엑셀 다운로드·업로드 구현 (Apache POI)배포 전에 보안 취약점을 스스로 점검.. 더보기
[Oracle SQL] 쿼리 결과를 엑셀로 깔끔하게 내보내기 – SQL Developer·DBeaver 내보내기와 한글 깨짐·앞자리 0·긴 숫자 해결 환경 : Oracle 11g 이상 / SQL Developer, DBeaver / Excel 2016 이상·Microsoft 365데이터 추출 요청의 마지막 단계는 거의 항상 "엑셀로 주세요"입니다. 쿼리는 금방 짰는데 막상 엑셀로 옮기면 한글이 깨지고, 사번 앞의 0이 사라지고, 카드번호 끝자리가 000으로 바뀌는 일이 생깁니다. 이 글은 Oracle 실무 쿼리 시리즈와 엑셀 시리즈를 잇는 글로, 쿼리 단계에서 할 일 → 내보내기 → 엑셀에서 마무리 순서로 정리했습니다.1. 쿼리 단계에서 미리 해 둘 것SELECT o.order_id AS "주문번호", c.cust_nm AS "고객명", REG.. 더보기
[서버·보안] 리눅스 서버 점검 명령어 모음 – 디스크·메모리·CPU·포트·프로세스·로그·접속 이력 (상황별 정리) 환경 : RHEL·Rocky·CentOS 7 이상, Ubuntu 18.04 이상 (명령어 대부분 공통, 다른 부분은 표시)"서버가 느려요", "디스크가 꽉 찼다고 알람이 와요", "8080 포트가 안 열려요" 같은 연락을 받으면 서버에 접속해 상태부터 확인해야 합니다. 매번 검색하던 명령어를 상황별로 모았습니다. 아래 명령어는 모두 조회만 하므로 운영 서버에서도 안심하고 쓸 수 있습니다. 일부는 다른 사용자의 정보까지 보려면 sudo가 필요합니다.1. 서버 기본 정보명령어확인 내용hostname / hostname -I서버 이름 / IP 주소cat /etc/os-releaseOS 종류와 버전uname -r커널 버전uptime켜진 지 얼마나 됐는지, 최근 1·5·15분 평균 부하timedatectl서버 시.. 더보기
[서버·보안] MyBatis #{}와 ${} 차이 – SQL 인젝션 예방, 정렬 컬럼·LIKE·IN 조건 안전하게 쓰기 환경 : MyBatis 3 / Oracle 기준 (MySQL 등도 원리는 같고, 문자열 연결 문법만 다릅니다)MyBatis에서 파라미터를 넣는 방법은 #{}와 ${} 두 가지입니다. 겉보기엔 비슷하지만 ${}를 잘못 쓰면 SQL 인젝션 취약점이 생겨서, 보안 점검에서 가장 먼저 검색하는 대상이기도 합니다. 둘의 차이와, ${}를 쓰고 싶어지는 정렬·LIKE·IN 조건을 안전하게 바꾸는 방법을 정리했습니다.1. 차이 한눈에 보기구분#{}${}동작? 자리에 값을 바인딩 (PreparedStatement)값을 SQL 문장에 글자 그대로 끼워 넣음문자열 따옴표알아서 처리직접 붙여야 함SQL 인젝션안전위험 (입력값이 SQL 문법이 됨)쓰는 곳조건 값 (거의 모든 경우)컬럼명·테이블명 등 식별자 (허용 목록 검사 .. 더보기
[서버·보안] 웹 취약점 기본 점검 목록 – 개발자가 배포 전에 확인할 10가지 (SQL 인젝션·XSS·파일 업로드·권한) 환경 : Java·Spring 웹 애플리케이션 기준 (다른 언어도 점검 항목은 같습니다)보안 점검이나 모의해킹 결과를 받아 보면 매번 비슷한 항목이 반복됩니다. 대부분 개발할 때 조금만 신경 쓰면 막을 수 있는 것들이라, 배포 전에 개발자가 스스로 확인할 수 있도록 자주 지적되는 10가지를 "확인 방법"과 "조치"로 정리했습니다. OWASP Top 10과 국내 웹 취약점 점검 기준에서 공통으로 다루는 항목들입니다.주의 : 아래 확인 방법은 본인이 개발·관리하는 개발(테스트) 서버에서만 해 보세요. 허가받지 않은 시스템에 공격 문자열을 넣어 보는 것은 법적 문제가 될 수 있습니다.1. 한눈에 보기No항목한 줄 요약1SQL 인젝션입력값이 SQL 문장의 일부가 되지 않게2XSS (크로스 사이트 스크립팅)입력값.. 더보기
[Java·Spring] 엑셀 다운로드·업로드 구현 – Apache POI 기본, 대용량은 SXSSF, 업로드 검증과 한글 파일명 환경 : Spring Boot 3.x / Java 17 이상 / MyBatis 3 / Oracle 12c 이상 (Spring Boot 2.x에서도 대부분 같게 동작하며, 다른 부분은 본문에 표시) / Apache POI 5.x업무 시스템에서 "조회 결과를 엑셀로 받게 해 주세요", "엑셀로 한 번에 등록하게 해 주세요"는 거의 빠지지 않는 요구입니다. Java에서는 Apache POI 라이브러리로 처리하는데, 데이터가 몇만 건만 넘어도 메모리 부족이 나거나, 업로드한 숫자가 1.0으로 들어오는 식의 문제가 생깁니다. 다운로드와 업로드를 실무에서 바로 쓸 수 있는 형태로 정리했습니다.1. 의존성// build.gradleimplementation 'org.apache.poi:poi-ooxml:5.2.5'x.. 더보기
[Java·Spring] @Transactional 제대로 쓰기 – 롤백이 안 되는 5가지 경우와 readOnly·REQUIRES_NEW 활용 환경 : Spring Boot 3.x / Java 17 이상 / MyBatis 3 / Oracle 12c 이상 (Spring Boot 2.x에서도 대부분 같게 동작하며, 다른 부분은 본문에 표시)주문 저장, 재고 차감, 포인트 적립을 한 메서드에서 처리하다가 중간에 오류가 나면 앞에서 저장한 데이터도 모두 취소돼야 합니다. Spring에서는 메서드에 @Transactional 하나만 붙이면 되지만, 실제로는 "분명 예외가 났는데 데이터가 저장돼 있다"는 일이 자주 생깁니다. 동작 원리와 롤백이 안 되는 대표적인 경우, 실무에서 쓰는 옵션을 정리했습니다.1. 기본 동작@Service@RequiredArgsConstructorpublic class OrderService { private final O.. 더보기
[Java·Spring] Spring Boot + MyBatis로 Oracle 연결하기 – 설정·매퍼 XML·동적 조건·페이징과 자주 나는 오류 환경 : Spring Boot 3.x / Java 17 이상 / MyBatis 3 / Oracle 12c 이상 (Spring Boot 2.x에서도 대부분 같게 동작하며, 다른 부분은 본문에 표시)업무 시스템을 새로 만들거나 기능을 추가할 때 가장 먼저 하는 일이 DB 연결입니다. JPA도 많이 쓰지만, 이미 테이블과 쿼리가 정해진 Oracle 기반 업무 시스템에서는 SQL을 직접 다루는 MyBatis가 여전히 편합니다. Spring Boot에서 Oracle + MyBatis를 연결하고 조회 화면 하나를 만드는 데 필요한 설정과, 처음에 자주 만나는 오류를 정리했습니다.예제 테이블은 Oracle 실무 쿼리 시리즈에서 쓰는 주문 테이블(ORDERS)입니다. 생성 스크립트는 Oracle 실무 쿼리 목차 글에 .. 더보기

반응형