Back-end/java 26

@RequestBody 호출 시 일어나는 일을 간단히 알아보기 (feat. MessageConverter, ObjectMapper)

Http 요청 시 항상 보게되는 @RequestBody 어노테이션이 있다. @ModelAttribute 어노테이션과 항상 비교되는 어노테이션이다. 오늘은 @RequestBody만 딥하게 파보도록 하겠다. 지금까지는 @RequestBody를 '스프링 내부의 리플렉션으로 매핑을 해주며 JSON으로 요청이 가능하고 자바객체로 역직렬화를 해준다' 라고만 알고있었다. 더 들어가보자. @RequestBody 애너테이션의 역할은 클라이언트가 보내는 HTTP 요청 본문(JSON 및 XML 등)을 Java 오브젝트로 변환하는 것이다. HTTP 요청 본문 데이터는 Spring에서 제공하는 HttpMessageConverter를 통해 타입에 맞는 객체로 변환된다. 1. HttpMessageConverter 이동 @Reque..

Back-end/java 2023.12.06

AOP를 사용하여 에러 로그 찍기

앞의 두 글에 심화된 내용이다. 설정은 그대로 하고,  package com.example.first.aop;import lombok.RequiredArgsConstructor;import lombok.extern.slf4j.Slf4j;import org.aspectj.lang.annotation.AfterReturning;import org.aspectj.lang.annotation.AfterThrowing;import org.aspectj.lang.annotation.Aspect;import org.slf4j.Logger;import org.springframework.stereotype.Component;@Aspect@Component@Slf4j@RequiredArgsConstructorpublic..

Back-end/java 2023.09.26

빌드 중 NoSuchFileException 에러 미해결

평소처럼 자바 프로그램을 실행 시키는 중에 아래와 같은 에러가 났다.2023-09-26 09:23:02.151 WARN 23408 --- [ main] o.a.tomcat.util.scan.StandardJarScanner : Failed to scan [file:/C:/Users/weaver-gram-002/.gradle/caches/modules-2/files-2.1/com.oracle.database.security/oraclepki/21.3.0.0/oracle.osdt/osdt_cert.jar] from classloader hierarchyjava.io.IOException: java.lang.reflect.InvocationTargetException at org.apac..

Back-end/java 2023.09.26

게시판 페이징 기능 완료

페이징 처리는 막상 해보니, 크게 어려움은 없었는데 변수가 많아서 헷갈렸다. 가장 중요한 변수는 세가지 정도이다. 총 게시물 (boards), 페이지 사이즈 (한 페이지에 담기는 게시물 수, pageSize), 총 페이지 수(총 게시물을 페이지사이즈로 나눈 수, totalPages) 기본적으로 페이지 사이즈는 10으로 잡는다. 나도 10으로 잡았다. 1. BoardController // 게시판 글 조회 (페이징 처리 된) @GetMapping public String getAllBoards(Model model, @RequestParam(defaultValue = "1") int currentPage) { int pageSize = 10; // 페이지당 게시물 수 List boards = boardSe..

Back-end/java 2023.09.24

파일 업로드 기능 구현 중 에러 - IllegalStateException: File has been moved - cannot be read again

ERROR 14924 --- [nio-8080-exec-6] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.IllegalStateException: File has been moved - cannot be read again] with root causejava.lang.IllegalStateException: File has been moved - cannot be read again at org.springfr..

Back-end/java 2023.09.21

스프링 부트 페이징처리 (jsp, mybatis, postgresql)

https://congsong.tistory.com/26 스프링 부트(Spring Boot) - 페이징(Paging) & 검색(Search) 처리하기 1/2 [Thymeleaf, MariaDB, IntelliJ, Gradle, MyBat본 게시판 프로젝트는 단계별(step by step)로 진행되니, 이전 단계를 진행하시는 것을 권장드립니다. DBMS 툴은 DBeaver를 이용하며, DB는 MariaDB를 이용합니다. (MariaDB 설치하기) 화면 처리는 HTML5 기반congsong.tistory.com  https://carrotweb.tistory.com/257 Spring에 Paging(페이징) 처리 및 적용게시판에서 게시물 리스트를 가져올 때 가져올 게시물 리스트 수를 지정하여 가져오지 않으면..

Back-end/java 2023.09.21

스프링부트 로컬에서 이미지 불러오기

http://antananarivo.tistory.com/63 스프링, 로컬에서 이미지 불러오기 최종. 일주일을 해맸다. 정확히 말하면 5일.결론을 얻은것 같았는데 다시 원점으로 돌아오기를 반복... 그래도 결국 답을 찾아냈다.(스프링 버젼은 4.3, jdk는 1.8, tomcat은 8.0 버젼을 사용중임) 방법은 크 antananarivo.tistory.com 3가지 클래스만 수정해주면 된다. 1. HomeController @RequiredArgsConstructor @Controller @Slf4j @CrossOrigin public class HomeController { private final UserService userService; private final HomeMapper homeMa..

Back-end/java 2023.09.19

AbstractMethodError: Receiver class net.sf.log4jdbc.sql.jdbcapi.ResultSetSpy does not define or inherit an implementation of the resolved method 'abstract java.lang.Object getObject(java.lang.String, java.lang.Class)' of interface java.sql.ResultSet.

https://momobob.tistory.com/23 [JDBC Error] log4jdbc를 이용한 DB설정 시 에러 해결 Spring boot에서 log4jdbc.sql.jdbcapi.DriverSpy 드라이버를 이용한 DB 설정시 아래와 같은 에러가 발생함 java.lang.RuntimeException: Driver net.sf.log4jdbc.sql.jdbcapi.DriverSpy claims to not accept jdbcUrl, jdbc:log4jdbc:oracle:thin:@l momobob.tistory.com https://makeaplayground.tistory.com/179 Spring Boot SQL 로그 설정 (Log4jdbc) Gradle 적용시키기 Log4jdbc Log..

Back-end/java 2023.09.19

DBeaver에서 컬럼명 언더바 오류 해결

1. mybatis-config.xml 아래 세팅 추가! // 아래 세팅 추가! 2. mapper.xml 으로 시작하는 설정 추가! DB에 있는 컬럼명을 현재 VO 명과 맞추는 작업이다. 그리고 원하는 쿼리로 내려가서, 만들어준 설정의 값(resultMap = "userResultMap") 을 넣어준다! SELECT "userId", password, name, username, nickname, phone_number, zipcode, street_adr, detail_adr FROM postgres.first_project.users WHERE username = #{username}

Back-end/java 2023.09.19

유효성 검사시 기존 작성 데이터가 사라지는 문제 해결

function register() { // e.preventDefault(); // 폼 제출 방지 // 1. 여기서 내가 화면에서 post 로 입력하는 정보를 하나하나 가져오기 var name = $('#name').val() var nickname = $('#nickname').val() var username = $('#username').val() var password = $('#password').val() var passwordConfirm = $('#passwordConfirm').val() var phoneNumber = $('#phoneNumber').val() var profilePicture = $('#profilePicture').val() var zipcode = $('#zipc..

Back-end/java 2023.09.14

카카오 주소 검색 api 로 회원가입 시 주소 입력하기 & 에러

http://postcode.map.daum.net/guide Daum 우편번호 서비스 우편번호 검색과 도로명 주소 입력 기능을 너무 간단하게 적용할 수 있는 방법. Daum 우편번호 서비스를 이용해보세요. 어느 사이트에서나 무료로 제약없이 사용 가능하답니다. postcode.map.daum.net 카카오 공식문서에서 제공하는 api 예시 코드이다. 내가 작성한 register.jsp 코드 회원가입 이름 이름을 입력해주세요. 별명 별명을 입력해주세요. 주소 입력 우편번호 도로명 주소 상세주소 이메일 이메일을 입력해주세요. 인증 인증번호 인증번호를 입력해주세요. 비밀번호 비밀번호를 입력해주세요. 비밀번호 확인 비밀번호를 다시 입력해주세요. 휴대폰 번호 휴대폰 번호를 입력해주세요. 프로필 사진 이미지 파일을..

Back-end/java 2023.09.13

UnsatisfiedDependencyException , NoClassDefFoundError 에러

회원가입 시 아래 에러가 남 에러가 난 상태의 코드.. Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. 2023-09-13T10:26:55.675+09:00 ERROR 11084 --- [ main] o.s.boot.SpringApplication : Application run failed org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'homeController' defined in file [C:\User..

Back-end/java 2023.09.13

[리눅스]리눅스 서버에서 톰캣을 강제종료 하는 방법 (Web server failed to start. Port 8080 was already in use. 해결)

jar를 재배포하는 과정에서 이전의 jar파일이 실행되고 있어서 오류가 났다. Web server failed to start. Port 8080 was already in use. 라는 문구가 나왔다. 이전에 실행시켰던 서버를 끄는 방법을 정리해보았다. 1. 실행중인 프로세스 찾기 ps -ef | grep [파일명] 또는 ps -ef (전체 실행중 프로세스 보기) 2. 8080의 포트를 사용하는 프로세스 검색하기 netstat -anp |grep 8080 3. 8080의 포트를 사용하는 PID 검색하기 fuser -n tcp 8080 4. 해당 PID 강제 종료 kill -9 [해당 PID] 1번 명령어 다시 실행하여 종료되었는지 확인 후, 재 배포 하면 된다. 나의 경우 1,4번만 실행해서 종료했다...

Back-end/java 2023.06.27

[혼공자][챕터13-1] 컬렉션 프레임워크

컬렉션 프레임워크란? 자료구조(Data Structure) 를 사용해서 객체들을 효율적으로 추가, 삭제, 검색할 수 있게 한 인터페이스와 구현클래스 java.util 패키지에서 제공하는 프레임워크 배열은 선언 시 정한 크기(정한 용량)를 변경할 수 없고, 항목을 저장, 삭제, 추가하는 메소드가 없기 때문에 직접 인덱스를 사용해야 했던 불편함을 해결하기 위해 제공된 프레임워크 주요 인터페이스 : List, Set, Map List 컬렉션 배열과 비슷하게 객체를 인덱스로 관리 배열과의 차이점 : 저장용량이 자동으로 증가, 객체를 저장할 때 자동 인덱스가 부여됨 객체 자체를 저장하는 것이 아닌 객체의 번지를 참조하며, 동일한 객체가 중복저장시 동일한 번지가 참조됨 ArrayList, Vector, Linked..

Back-end/java 2022.12.14

[혼공자][챕터10] 예외처리

1. 예외 클래스 예외란, 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는프로그램 오류. 자바는 예외가 발생할 가능성이 높은 코드를 컴파일 할 때 예외 처리 유무를 확인한다. 만약 예외 처리 코드가 없다면 컴파일이 되지 않는다. 예외의 두가지 종류 일반예외 - Exception을 상속받지만 RuntimeException을 상속받지 않는 클래스 - 컴파일러 체크 예외 (컴파일러가 미리 체크를 해준다) - 실행 시 예외가 발생할 가능성이 높기 때문에 자바 소스를 컴파일하는 과정에서 해당 예외 처리 코드가 있는지 검사한다. - 예외처리 코드가 없다면 컴파일 오류 발생. 실행예외 - RuntimeException의 하위 클래스 - 컴파일러 넌 체크 예외 - 실행 시 예측할 수 없이 갑자기 발생하기 때문..

Back-end/java 2022.12.07

[혼공자][챕터5] 참조타입

1. 참조 타입과 참조 변수 자바의 타입은 크게 기본타입과 참조타입으로 분류된다. 참조타입이란 객체의 번지를 참조하는 타입으로 배열, 열거, 클래스, 인터페이스를 말한다. 메모리 사용 영역 JVM은 운영체제에서 할당받은 메모리 영역(Runtime Data Area)을 다음과 같이 세부 영역으로 구분해서 사용한다. - 메소드 영역 JVM이 시작할 때 생성되고 모든 스레드가 공유하는 영역. 코드에서 사용되는 클래스(.class)들을 클래스 로더로 읽어 클래스별로 정적 필드(static field)와 상수, 메소드 코드, 생성자코드 등을 분류해서 저장한다. - 힙 영역 객체와 배열이 생성되는 영역. 만약 참조하는 변수나 필드가 없다면 의미없는 객체가 되기 때문에 JVM이 쓰레기로 취급하고 쓰레기수집기(Garb..

Back-end/java 2022.11.11

[혼공자][챕터4] 조건문과 반복문

1. 조건문 - if 문, switch문 switch문은 if문처럼 조건식이 true일때만 실행하는 것이 아니라, 변수가 어떤 값을 갖느냐에 따라 실행된다. 변수의 값에 따라서 실행문이 결정되기 때문에 코드가 간결하다. 2. 반복문 - for문, while문, do-while문 while문에 true를 사용하면 무한루프를 돌게된다. 종료시키려면 변수의 값을 false로 만들거나, break문을 이용한다. - 문제 (while문작성. p161) - 정답 public class hh { public static void main(String[] args) { while(true) { int a = (int)(Math.random() * 6 ); int b = (int)(Math.random() * 6 ); ..

Back-end/java 2022.11.10

[혼공자][챕터1~2] 자바 환경설정, 변수와 타입

챕터1. 자바 환경설정 - 소스파일 : 프로그래밍 언어로 작성된 파일 - JDK가 설치되면 기본적으로 C:\Program Files\java 폴더가 생성된다. - 자바 컴파일러와 실행 명령어는 JDK 설치 폴더\bin 폴더에 있다. - JDK는 Java SE(Standard Edition)라는 스펙을 준수해서 만들어지므로 JDK버전과 Java SE버전은 동일하다. Java SE버전 표기 방식 : Java SE (주버전).(개선버전).(업데이트버전).((장기지원서비스버전)) - JDK 설치 폴더 안의 bin폴더를 Path환경변수에 등록하는 이유는 다른 경로에서 bin폴더 안에 있는 명령어를 사용할 수 있도록 하기 위함이다. 챕터2. 변수와 타입 자동타입변환 (기본타입을 크기순 정렬) byte < short..

Back-end/java 2022.11.07