본문 바로가기

전체 글323

웹페이지 페이징 및 파일 다운로드 구현 미니 프로젝트 (빅데이터 부트캠프 98~99일차) 프로젝트 주제 - Spring boot와 React를 사용하여 웹페이지에 페이징과 파일 다운로드를 구현 맡은 역할 - MySQL을 사용하여 함께 DB 세팅 - 기본적인 MVC패턴 구현 및 Diary Entity를 이용하여 diary_no를 통해 Diary Entity와 외래키 관계에 있는 File Entity의 데이터를 참고하여 웹페이지에서의 파일 다운로드 구현 - 웹페이지 게시판의 페이징 구현 프로젝트 진행시 막혔거나 새로 알게된 점 1 . @Query를 이용하여 메소드 위에 정적 쿼리를 작성하여 메소드를 정의하였는데 해당 쿼리문을 인식하지 못함 => 알고보니 쿼리문 작성시 DB에 테이블명이 file이어도 첫글자가 대문자인 File로 입력했어야 하는데 file로 입력한 것이 원인인 것을 발견하여 테이블.. 2022. 11. 25.
빅데이터 부트캠프 97일차 logging - 로깅(logging) = 시스템 동작시 시스템의 상태와 작동 정보를 시간의 경과에 따라 기록하는 것 - Log = 로깅된 기록 logging Level - Log는 위험도에 따라 6가지의 레벨로 나뉘어져 있음 - Logging Level은 src/main/resource에 있는 application.properties에서 설정해줄 수 있음 - 로그 레벨 설정은 지정한 로그 레벨 이상의 로그만을 수집하도록 설정하는 것 logger 생성방법 - private final Logger logger = LoggerFactory.getLogger(this.getClass());로 입력하여 Logger 수동으로 생성하여 사용 (LoggerFactory 이용) - Controller에 @Slf4j 적.. 2022. 11. 23.
빅데이터 부트캠프 96일차 Pageable - 페이징을 제공하는 인터페이스 - Pageable = 프론트에서 JPA Repository에 page와 size를 얼마로 설정해서 요청을 보냈는지에 대한 명령을 담는 데이터 타입 - JPA Repository에서 Pageable 객체를 참고하여 findAll을 실행하면 Page형식으로 결과값을 반환함 - Page = JPA Repository에서 Pageable 객체를 참고하여 메소드를 실행한 결과값들(Entity들)을 리스트 형식으로 담는 데이터 타입 ※ PageRequest.of(page, size) = page와 size에 대한 요청값을 Pageable 객체에 담아 반환하는 메소드 - getTotalPages() = 총 페이지 수 조회 - getTotalElements() = 총 .. 2022. 11. 22.
빅데이터 부트캠프 95일차 파일 다운로드 기능 구현 MultipartFile - 업로드 한 파일을 표현할 때 사용되는 인터페이스 - getContentType() = 파일 타입 조회 - getName() = 파일명 조회 - getOriginalFilename() = 파일명 조회 (확장자 포함) - getSize() = 파일 크기 조회 (byte 단위) - transferTo() = 해당 경로로 파일 업로드 ※ 파일 경로 입력시 [디렉터리 경로 + "\\" + 파일명]으로 입력해야 지정한 디렉터리에 지정한 파일명으로 파일을 업로드함 (Window의 특징 => "/"이 아닌 "\\" 입력) - HTML의 을 통해 파일을 받을 경우 @RequestParam()의 name값과 HTML 파일의 에서의 name값이 서로 일치해야 함 - Co.. 2022. 11. 21.
빅데이터 부트캠프 94일차 CRUD 구현 - DTO에서는 @Setter 사용, Entity에서는 @Setter 사용 X - Service와 Repository는 각각 Controller와 ServiceImpl에서 바로 객체로 불러와 유연하게 사용하기 위해서 interface로 생성 - View의 기능을 Postman을 이용하여 테스트 ※ Postman = 개발한 API를 간단한 방법으로 테스트하여 결과를 확인할 수 있음으로써 API 개발 생산성을 높여주는 플랫폼 JPA Repository - public interface Repository명 extends JpaRepository로 적용 - extends JpaRepository를 통해 외부 클래스에 Repository 객체 생성시 JPA 속성 사용 가능 - JPAReposito.. 2022. 11. 18.
빅데이터 부트캠프 93일차 MyBatis - Java 객체와 SQL 사이의 자동 매핑 기능을 지원함으로써 JDBC를 보다 편하게 사용할 수 있도록하는 ORM 프레임워크 - JDBC의 대부분의 기능을 제공 - SQL문을 Mapper XML 파일에 따로 저장해 놓음으로써 프로그래밍 코드와 분리되어 있어 SQL문에 변경이 있을시 따로 자바 코드를 수정할 필요 X - Mapper 인터페이스 파일(src/main/java)에 있는 메소드에 대한 자세한 설정을 Mapper.xml(src/main/resources)에 작성 - Mapper 인터페이스 파일에서 같은 이름의 메소드인데 입력받는 데이터 타입이 다른 경우 자동으로 오버로딩이 적용 - Mapper.xml에서 입력값을 쿼리문에 활용할때는 [#{컬럼명}] 형식을 이용 예시 Mapper.j.. 2022. 11. 17.
빅데이터 부트캠프 92일차 AOP(Aspect Oriented Programming) - 관점 지향 프로그래밍 - 공통 기능을 분리하여 모듈화하여 지정 시점에 해당 로직이 실행하게 함 - 부가기능을 Aspect로 정의하여 핵심기능에서 부가기능을 분리함으로써 핵심기능을 설계하고 구현할 때 객체지향적인 가치를 지킬수 있도록 도와주는 개념 - Aspect = AOP의 기본 모듈 (Advice + Pointcut) - Aspect는 싱글톤 형태의 객체로 존재 - Advice = 부가기능 설정 - Pointcut = Advice를 어디에 적용할지 설정 어노테이션 - @Aspect = AOP로 정의하는 클래스 지정 - @Pointcut = 메소드, Annotation 등 적용 지점 설정 - @Before(pointcut 표현식) = 메소드 .. 2022. 11. 16.
빅데이터 부트캠프 91일차 JPA(Java Persistence API) - 자바 진영의 ORM 기술 표준 (자바에서 RDB를 사용하는 방식을 정의한 인터페이스) - ORM(Object Relational Mapping) = 객체와 RDB의 데이터를 자동으로 매핑(연결)해주는 것 => 어플리케이션의 객체를 RDB 테이블에 자동으로 영속화 해주는 것 - 자바 환경에서 반복적인 SQL CRUD 처리에 용이함 - JPA는 persistence.xml을 사용해서 필요한 설정 정보를 관리 spring.jpa.hibernate.ddl-auto 속성 - create = 기존 테이블 삭제 후 다시 생성 (DROP + CREATE) - create-drop = create와 같으나 종료시점에 테이블 DROP - update = 변경사항만 반영 -.. 2022. 11. 15.
빅데이터 부트캠프 90일차 Spring Framework - 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크 - DI(Denpendency Injection) = IoC Container가 개발자 대신 xml에 파일에 정의된 대로 bean 객체를 생성하고 의존성을 주입하는 것 - IOC(Inversion Of Control) Container = 사용자가 작성한 메타데이터(xml 파일 또는 어노테이션)에 따라 bean 클래스를 생성 및 관리 하는 Spring의 컴포넌트 (= Spring Container) Spring Legacy Project - Spring Legacy Project = Spring Framework의 일반적인 프로젝트 - Spring MVC Project = Maven과 여러 라이브러리가 세팅되어 생성되는.. 2022. 11. 14.
기본 웹페이지 구현 미니 프로젝트 (빅데이터 부트캠프 86~89일차) 프로젝트 주제 - 간단한 웹페이지를 만들어봄으로써 기본적인 백엔드-프론트엔드 연결 성공을 구현해보는 미니 프로젝트 맡은 역할 - MySQL을 사용하여 함께 DB를 세팅 Java(Eclipse) - 고양이 이미지(Picture) 데이터에 대한 각각의 MVC 패턴 구현 - 최종적으로 프론트와 정상적으로 연동하여 백엔드에서 정의한 메소드를 프론트에서도 정상적으로 실행할 수 있도록 성공시키는 것이 목표 프로젝트 진행시 막혔거나 새로 알게된 점 1. doGet -get 방식 service O - get,post방식 모두 doPost - post 방식 2. 이클립스에서 백엔드-프론트엔드 연결시 필요한 jdbc라이브러리들은 프로젝트에 추가하는 것이 아닌 WebContent폴더의 WEB-INF 폴더의 lib 폴더에 넣.. 2022. 11. 12.
Pull Request (PR) main에서 파생된 브랜치에서 발생한 변경사항을 main 브랜치에 반영하기 전에 코드를 공유하여 최종적으로 변경사항을 main에 반영할 지 고민할 시간을 주는 GitHub의 기능 (핵심에 변경 사항 반영전 중간 점검) ex) main에서 파생된 브랜치 A에서 변경사항이 생겨 A에 커밋&푸시 => 깃허브에서 Pull Requset 버튼이 나타남 => 버튼 클릭 => 메세지 입력 => 입력한 메세지와 함께 코드를 공유하여 최종적으로 A에서의 변경사항을 main에 merge 할지말지 결정할 시간 제공 및 토론을 할 수 있게 해줌 => 최종적으로 merge를 결정하면 merge pull request 버튼 클릭 => A에서 커밋&푸시된 내용이 main에서도 반영 2022. 11. 9.
BFS 유형에서 이차원 배열 주의사항 BFS 유형에서 Map = [[1,0,1], [1,1,1],[1,0,1],[0,0,1]]과 같은 이차원 배열이 주어졌을때 Map[]는 지도의 행(row)에 대한 값이고 Map[][]는 지도의 열(column)에 대한 값임을 헷갈리지 말고 명심할 것! 관련문제 https://school.programmers.co.kr/learn/courses/30/lessons/1844 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 2022. 11. 8.
빅데이터 부트캠프 85일차 Json 파일 불러오기 fetch - async() => {const response = await fetct(); return response.json();} 형식으로 사용 - fetch는 프로미스 객체를 반환하기 때문에 .json()으로 타입 변환 필요 axios - axios => npm install axios를 통해 설치 => import axios from "axios"; - async() => {const response = await fetct(); return response.data;} 형식으로 사용 - axios는 json 객체를 반환하기 때문에 타입 변환 필요없이 바로 json파일 사용 가능 styled components - styled components => npm instal.. 2022. 11. 8.
빅데이터 부트캠프 84일차 useContext - 최상위 App 컴포넌트에서 useContext로 값을 지정하게 되면, 해당 값을 전역에 걸쳐 사용할 수 있도록하는 훅 (Context로 공유한 데이터를 쉽게 받아올 수 있게 해주는 기능) - Context를 이용하면 단계마다 일일이 props를 넘겨주지 않고 컴포넌트 트리 전체에 선택적으로 데이터를 제공할 수 있음 => 불필요한 prop drilling 해결 - prop drilling = props는 부모 컴포넌트가 자식 컴포넌트에게 단방향으로 데이터를 전달하기 때문에 부모 컴포넌트와 자식 컴포넌트 사이에 있는 컴포넌트들을 거쳐야하는 현상 - Context를 사용하면 컴포넌트 재사용이 어려움 - Context는 주로 따로 context 생성 js파일을 만들어 해당 파일에서 Con.. 2022. 11. 7.
빅데이터 부트캠프 83일차 컴포넌트 - 리액트로 만들어진 앱을 이루는 최소 단위 - 데이터(props)를 입력받아 상태(state)에 따라 DOM Node(HTML 요소 객체)를 출력(return)하는 함수 - 함수형, 클래스형 두 종류가 존재 - 컴포넌트명 정의는 대문자로 시작 - 엘리먼트(Element) = 컴포넌트를 구성하는 리엑트에서 가장 작은 단위 ex) 2개의 엘리먼트를 출력하는 View 컴포넌트 import React from 'react'; function View({children}) { return ( View {children} ) } export default View; 프로퍼티(props) - 부모 컴포넌트에서 자식 컴포넌트로 전달해주는 데이터 (부모요소에서 설정) - 프로퍼티는 컴포넌트 내부에서 수정 불가.. 2022. 11. 4.