본문 바로가기

전체 글316

WebClient OPEN API HTTP GET 호출 문제 상황 1공공데이터 포털의 OPEN API를 이용하여 원하는 데이터를 WebClient를 활용한 HTTP GET 방식으로 추출하려고 다음과 같이 시도하였지만 java.net.UnknownHostException: Failed to resolve 'http:' 오류 발생 원인 1UriBuilder의 path() 메서드에서 전체 URL을 사용한 것이 문제 → http:를 호스트명으로 잘못 해석 ※ UriBuilder.path()는 절대 경로가 아니라 상대 경로를 설정하는 데 사용 해결 방법 1다음과 같이 baseUrl에는 API의 기본 URL을 입력하고 나머지 상대경로는 UriBuilder.path()로 지정 상황 2해결 방법 1로 수정했으나 400 Bad Request 발생  원인 2OPEN API 접근 승.. 2024. 11. 20.
계층 쿼리 문법 CONNECT BY PRIOR- 컬럼 간의 부모-자식 관계 지정에 사용- CONNECT BY PRIOR (부모 컬럼) = (자식 컬럼) 형식으로 입력- 부모 컬럼과 자식 컬럼은 같은 테이블 내에 있어도 상관 Xex) CONNECT BY PRIOR post_num = parent_num (post_num = 게시글 번호, parent_num = 부모 게시글 번호)→ post_num(부모)과 parent_num(자식)이 일치하는 경우를 조건으로 설정→ post_num이 부모인 경우 이 부모 게시글 아래에 자식 게시글(답글)을 가져오는 계층 구조 설정 START WITH- 계층 쿼리에서 탐색을 시작할 특정 루트 노드를 지정할 때 사용 ex) START WITH parent_num IS NULL → parent.. 2024. 11. 14.
Oracle이란 정의- 관계형 데이터베이스 관리 시스템(RDBMS)의 대표적인 한 종류 장점안정성: 대규모 데이터와 높은 트랜잭션 처리량을 요구하는 환경에서도 안정적으로 동작보안성: 데이터 암호화, 접근 제어, 감사 로그 등 강력한 보안 기능을 제공하여 민감한 데이터를 안전하게 관리 가능확장성: 클러스터링과 분산 데이터베이스 지원을 통해 대용량 데이터 처리가 가능하며 높은 성능을 유지하면서도 확장 가능강력한 커뮤니티와 지원: 현존하는 RDBMS에서 가장 역사가 오래되었고 다양한 산업에서 사용하는 만큼 풍부한 자료와 커뮤니티 지원이 존재단점비용: 라이센스 비용이 높아 중소기업이나 개인이 사용하기에는 부담될 수 있음복잡성: 기능이 방대하고 설정이 복잡하여 학습 곡선이 높고, 숙련된 관리자가 필요하드웨어 요구사항: 고성능을 .. 2024. 11. 14.
JSP에서 JavaScript와의 백틱(`) 문제 현상const fileName = "부엉이";alert(`파일 ${fileName}는 이미 존재하는 파일입니다.`);// 경고창이 파일 는 이미 존재하는 파일입니다. 로 출력됨 JSP에서 태그 안에 백틱(`${}`)을 사용하여 코드를 적용시켰는데 데이터가 출력되지 않음 원인JSP와 JavaScript 둘 다 같은 문법을 사용하고 있어 JSP에서 에 JavaScript 코드로 ${}을 EL 표현식으로 착각하여 먼저 해석하여 JavaScript의 템플릿 리터럴이 제대로 동작하지 않기 때문 해결 방법${}을 $('${}')으로 감싸서 입력const fileName = "부엉이";alert(`파일 ${'${fileName}'}는 이미 존재하는 파일입니다.`);// 경고창이 파일 부엉이는 이미 존재하는 파일입니.. 2024. 11. 6.
MultipartRequest, ServletFileUpload 혼용 문제 현상게시글 작성 페이지의 폼에서 method="post" enctype="multipart/form-data"를 통해 보낸 데이터를 다음과 같이 처리하였더니 MultipartRequest를 활용한 multi.getParameter()는 데이터가 정상적으로 조회되는데 ServletFileUpload를 활용한 items는 조회가 아무것도 되지 않았음 원인ServletFileUpload 생성 전에 request는 이미 MultipartRequest 객체 생성 시 MultipartRequest에 의해 처리된 후라서 ServletFileUpload를 사용하면 request 객체에서 이미 처리된 필드에 대한 접근이 제한되어 빈 값이 반환됐던것 해결 방법MultipartRequest, ServletFileUpload.. 2024. 11. 6.
페이징 시 값 고정 현상jsp 게시판 검색 페이지에서 다른 페이지를 눌러 페이징을 실행했을 때 오류 발생  원인검색에 이용했던 option과 keyword가 유지되지 않고 빈값으로 초기화 된 상태로 전달되어 SQL 상에서 에러가 발생하여 데이터를 못 불러와 화면에 데이터가 출력되지 않음 → request에 저장되어 있던 option과 keyword 값이 페이지 이동 시 소멸하기 때문 (HTTP의 stateless 특성)※ 무상태성(stateless) = 서버가 클라이언트의 상태를 보존하지 않는 특징 ※ 성능과 효율성을 높이기 위하여 서버는 각 요청을 독립적으로 처리하고 요청 처리가 완료되면 해당 요청과 관련된 모든 데이터는 소멸되기 때문에 다음 요청(페이지 이동)에서는 이전 요청의 데이터를 사용할 수 없음 해결option과.. 2024. 11. 4.
java.io.IOException: Corrupt form data: premature ending 현상 Controller@WebServlet("/main")public class BoardController extends HttpServlet { private static final long serialVersionUID = 1L; private BoardDAO dao = new BoardDAO(); protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String saveDir = getServletContext().getRealPath("/upload"); int maxSize = 10 * 10.. 2024. 11. 1.
Jsoup 정의- HTML 파싱 JAVA 외부 라이브러리- 웹 스크래핑, 데이터 추출, HTML 문서 수정 및 웹 페이지의 내용 분석에 널리 사용 - DOM과 CSS 선택자를 사용하여 HTML 요소를 쉽게 다룰 수 있음- DOM의 데이터 타입에 대응하는 Document, Element, Elements, Attributes 클래스가 존재 DocumentDocument doc = Jsoup.connect("https://example.com").get();Document doc = Jsoup.parse(new File(./example.html));- Jsoup.parse(File file) 혹은 Jsoup.connect(String url).get()을 통해 HTML 파일에 접근- 위 과정을 통해 얻은 Docume.. 2024. 10. 23.
순수 Java로 서버 구동 과정1. HttpServer를 통해 HTTP 서버 생성HttpServer.create(InetSocketAddress address, int backlog) 메서드를 사용해 HttpServer 객체(서버) 생성InetSocketAddress(ip, port) = 지정한 IP 주소와 포트 번호를 서버의 주소 및 포트로 설정하여 소켓 생성2. createContext()를 통해 특정 경로로 들어오는 요청에 대한 Handler 정의해당 Handler는 HttpHandler 인터페이스를 구현HttpHandler 인터페이스의 handle(HttpExchange exchange)에서 client 요청을 처리HttpExchange = 서버와 클라이언트 간의 HTTP 요청과 응답을 처리하는 데 사용되는 클래스 exc.. 2024. 10. 23.
CORS(Cross-Origin Resource Sharing, 교차 출처 자원 공유) 정의- 웹 브라우저에서 다른 출처의 리소스에 대한 접근을 제어하기 위한 보안 메커니즘 - 웹 애플리케이션이 자신이 로드된 도메인과 다른 도메인에서 리소스를 요청할 때 이를 허용하거나 거부하는 방식- CORS는 서버에서 설정하는 것이기 때문에 client에서는 완전히 제어할 수 없음 작동 방식1. 프리플라이트 요청 - client가 실제 요청을 보내기 전에 OPTIONS http method를 사용하여 서버에 Preflight 요청서버는 클라이언트의 출처와 요청 메서드, 헤더를 기반으로 요청을 허용할지를 판단2. 서버 응답 - 서버가 요청을 허용한다면 다음과 같은 응답 헤더를 포함Access-Control-Allow-Origin: 허용된 출처 (예: *는 모든 출처를 허용).Access-Control-Al.. 2024. 10. 23.
jQuery jQuery- 오픈소스 기반의 JavaScript의 라이브러리 중 하나- 기존 JavaScript 코드를 짧고 단순한 코드로 웹 페이지에 다양한 효과나 연출(HTML의 DOM 조작, 이벤트 핸들링, 애니메이션, Ajax)을 적용할 수 있음- Element(HTML 태그) 선택이 편리하고 효율적으로 제어할 수 있음- $() = jQuery 객체를 의미 (=jQuery())- $(HTML태그) 형식으로 지정한 HTML 태그 전체를 지정 - HTML 파일에서 마지막 부분에 jQuery CDN에 있는 버전별 script 코드를 복사+붙여넣기하여 세팅- $(document).ready(function(){}) = $(function(){}) = DOM이 생성되면(위 -> 아래 순으로 모든 코드를 읽은 후 실행).. 2024. 10. 23.
DOM 정의- Document Object Model- XML이나 HTML 문서의 태그들을 JavaScript를 통해 객체로 조작할 수 있도록 API를 제공하는 인터페이스 DOM 객체의 구성요소- property = DOM 객체의 변수 HTML 태그의 속성- method = DOM 객체의 함수- collection = DOM 객체의 배열- eventListener = HTML 태그의 이벤트 리스너- style = HTML 태그의 CSS  데이터 타입- document = 웹 페이지 그 자체를 의미하는 객체이자 DOM 트리의 최상위 객체 - element = DOM 트리에서 XML이나 HTML 태그를 가리키는 객체 - nodeList = element의 배열 (Array와는 다르지만 list[0]처럼 index를.. 2024. 10. 22.
IAM(Identity and Access Management) 정의- AWS에서 제공하는 사용자 접근 권한 관리 서비스- AWS 사용자 및 그룹을 만들고 관리하며 AWS 리소스(RDS, S3, EC2 등)에 대한 액세스를 허용 및 거부 설정함으로서 전반적인 사용자 관리를 할 수 있도록 해줌- 단순히 엑세스 권한 설정 뿐만 아니라 언제 어디서 누가 무엇을 어떻게 할 수 있도록 제안을 설정할 수도 있음- AWS는 AWS 리소스에 대한 접근 권한을 기본적(default)으로 미부여하도록 설정되어 있어 AWS의 특정 리소스를 접근하려면 IAM을 통해 권한을 허용해줘야 함 구성 요소사용자(User)- AWS의 기능과 자원을 이용하는 사람 혹은 어플리케이션- 각 사용자 별로 권한을 부여할 수 있음ex) A - S3, B - RDS, C - EC2, D - S3, EC2, E .. 2024. 9. 15.
S3(Simple Storage Service) 정의- AWS에서 제공하는 온라인 객체 스토리지 서비스 (일종의 파일 저장 서비스)- 구글 드라이브처럼 데이터를 온라인에 객체(Object) 형태로 저장- 주로 백엔드에서 파일 업로드/다운로드 기능을 구현할 때 사용- 저장 용량이 무제한이며 EC2와 EBS 보다 가격이 훨씬 저렴함- S3에서 저장소의 단위를 버킷(Bucket), 파일의 단위를 객체(Object)로 정의 (객체 = S3 버킷에 업로드된 파일)※ 버킷 = GitHub의 Repository와 비슷한 개념 업로드/다운로드 과정(이미지)업로드다운로드기본 세팅버킷 생성1. AWS 로그인 후 S3 대시보드 접속 → 버킷 만들기 클릭2. 퍼블릭 엑세스 차단 해제 + 경고 메시지의 인지 확인 버튼 체크 3. 나머지 설정은 기본값으로 세팅 → 버킷 생성 .. 2024. 9. 14.
RDS(Relational Database Service) 정의- AWS에서 제공하는 관계형 데이터베이스(RDB) 서비스- 주로 백엔드 서버와 연결할 DB를 생성하고 관리하기 위해 사용- EC2 인스턴스에 RDB를 설치하여 운용 가능하지만 예기치 못한 에러로 인하여 인스턴스가 죽을 경우 DB의 데이터가 날아갈 위험성이 존재 ※ GCP 기준 SQL 기본 세팅DB 인스턴스 생성1. AWS 로그인 후 RDS 대시보드 접속 - 데이터베이스 생성 클릭 → 원하는 DB 종류 선택2. 마스터(admin) ID, 비밀번호 설정※ 편리하게 마스터 로그인 정보를 관리할 수 있는 AWS Secrets Manager도 있으나 비용이 더 청구됨 (백엔드의 yml 파일이나 properties 파일에 DB 정보를 하드코딩하는 대신 다음과 같은 형식으로 입력)datasource: driv.. 2024. 9. 13.