분류 전체보기 188

String 과 JVM

1. String 객체의 생성(new , "")과 메모리 속 저장 String은 Java에서 가장 많이 사용하는 클래스라고 해도 과언이 아니다. String의 생성자는 매우 많아서 다 외우는 것보다 필요에 의해 찾아서 사용하는 편이 더 좋다. 일반적으로 Java에서 이 String 객체를 생성하는 2가지 방법이 있다. 1. String literal인 큰 따옴표("")를 사용하는 것. 예시 : String name = "symbol" 2. new 연산자를 이용하는 것. 예시 : String name = new String("symbol") 소스 코드를 직접 작성해서 실행해보면 의문점이 생길 수 있다. 과연 1번과 2번을 통해 생성한 객체에 동일한 문자열을 주고 같다, 다르다를 출력해보면 어떻게 나올까? ..

Language/Java 2022.05.22

로깅 간단히 알아보기

서비스를 개발하고 테스트를 할 때, 그 로직이 잘 동작하는지를 확인하는 방법은 다양하다. 그 중에서 나는 보통 출력문 하나를 넣어서 잘 출력이 되는지를 확인하고는 했는데, 이러한 방식은 실무에서 사용하지 않고 사용을 권장하지 않는다. 그래서 출력문이 아닌 별도의 로깅 라이브러리를 사용해 로그를 출력하는데, 이 로깅 라이브러리의 종류가 매우 많다. 그래서 몇 개의 예시를 통해 정리해보고자 한다. @RestController public class LogTestController { // 이 코드는 로그를 선언하는 방법이다. private final Logger log = LoggerFactory.getLogger(getClass()); // 5번라인의 로그 선언 방법 외에도 아래 2개의 방법이 있다. pr..

스프링/백엔드 2022.05.18

예외 처리(Exception)

예외(Exception) 1. 예외(Exceptipn)란? 실생활이나 혹은 코드를 작성하거나, 서비스를 운영할 때 우리가 예상치 못한 방향으로 흘러갈 수 있다. 결국 이러한 예외를 우리가 직접 처리를 해야하는데, 자바에서는 예외(Exception)이라는 것을 던져버린다. 예외는 내부적 혹은 외부적 문제로 인해 발생하는 오류이다. 예외가 발생되면 프로그램은 종료된다는 점에서 에러와 동일하나, 예외는 예외 처리를 통해 프로그램을 종료하지 않고 계속 동작시킬 수 있다. 예시로 null인 객체에 메소드를 호출하거나, 5칸 짜리 배열이 있는데, 6번째 인덱스 값을 출력하라던지 등이 여기에 포함된다. 자바를 맛 본 사람이라면 대충 어떤 방식으로 예외 처리가 진행되는지 알 것이다. = try - catch 다음과 같..

Language/Java 2022.05.15

인터페이스와 추상클래스 그리고 Enum

1. 인터페이스(interface)란? 한 클래스가 다양한 클래스를 상속받아 다양한 기능을 사용하면 얼마나 좋을까? 하지만 다중 상속을 자바에서는 지원하지 않는다. 그래서 자바에서는 인터페이스를 이용해 다중 상속을 지원하고 있는데, 인터페이스(interface)는 클래스와 달리 객체를 생성할 수 없는, 클래스에서 구현해야하는 일종의 작업 명세서이다. 다른 클래스를 작성할 때 기본이 되는 틀을 제공하면서, 클래스 사이의 중간 매개 역할까지 담당하는 일종의 추상클래스이다. (인터페이스와 상속은 엄연하게 다름!) 상속이 부모 클래스의 기능을 자식 클래스가 물려 받는 것이라고 한다면, 인터페이스는 하위 클래스에 특정한 메소드가 반드시 존재하도록 강제한다. 일반적으로 인터페이스는 이렇게 구현한다. (추가적으로 인..

Language/Java 2022.05.14

2022 제 1회 정보처리기사 실기 시험을 끝내며...

중간고사 기간, 중간고사가 끝나도 쉴 틈이 없었다.... 왜?? why??? 바로 대망의 정보처리기사 실기 시험이 '나'를 기다리고 있었기 때문이다. 중간고사가 끝나고 하던 스터디도 중단하고 실기에 온전한 집중을 쏟았다... '수제비' 라는 책을 통해 실기고사를 준비했고, 수제비 카페와 파이널 모의고사, 인터넷 기출문제 등 하루도 쉬지않고 달려왔다 결과가 나와봐야 알겠지만 불합격이지 않을까 싶다 기출을 돌리고, 수제비 카페의 데일리 문제를 풀고, 페코페코 문제, 파이널 모의고사 등 기출과 예상문제, 개념을 계속 돌려보며 쉽게 외우려고 나만의 정리 노트와 요약본을 위주로 외웠다. 한 문제라도 더 맞추려고, 시험 전날은 날을 새워가며 디자인 패턴과 총 정리본을 반복해서 암기 할 수 있도록 노력했다. 과 동기..

자격증 2022.05.10

REST API 기초와 사용법 (2022.12.08 추가)

1. REST API란? REST(Representational State Transfer)의 약자로 '대표적인 상태 전달'이라는 의미를 가진다. 웹과 같은 분산 하이퍼미디어 시스템에서 사용하는 통신 네트워크 아키텍쳐와 비슷한데, 웹은 HTTP 프로토콜을 전송방식으로, URI를 식별 방식으로 사용하며 HTTP는 웹에서 GET, POST, PUT, DELETE 등 메소드를 이용해 정보를 주고받는 프로토콜이다 여기서 REST는 URI의 단순,간결한 장점을 계승한 네트워크 아키텍쳐라 보면 된다. 쉽게 요약해보자면 화면인 HTML을 리턴하는 방식이 아닌 사용자가 필요한 데이터 결과만 리턴해주는 방식이다. URI ? URL? URL : URI의 하위개념으로, 네트워크 상의 자원의 위치를 알려주기위한 규약으로 웹의..

스프링/백엔드 2022.03.28

크롤링(Crawling)과 스크래핑(Scraping)??

컴퓨터에 관심이 있는 사람이라면 누구나 한 번쯤은 크롤링이라는 단어를 들어본 적이 있을 것이다. 직접 구현을 해본 경험을 가진 사람도 있고, 그냥 이런 기술이라는 것만 알고 있는 사람일 수도 있다. 나 역시 후자에 속해있었는데, 크롤링을 통해 데이터를 수집하는 것만 알고 있었고 정확한 개념을 몰랐는데, 우연히 크롤링을 해볼 기회가 생겨서 일단 크롤링이 무엇인지를 알기 위해 인터넷에서 정보를 찾기 시작했다. 그러던 도중에 크롤링에 대한 정보와 스크래핑에 대한 정보를 보게 되었고, 뭔가 서로 밀접하게 관련되어 있지만, 용어를 잘못 사용한다던지, 잘못 이해하고 있는 사람들이 많다고 하기에 내가 정보를 바탕으로 정리를 해보려고 한다. 1. 크롤링(Crawling)이란? 나무위키에 있는 정의를 따른다면 크롤링은 ..

2번째 맞닥드린 오류 : could not prepare statement (DB 관련 오류)

앞서 책을 통해 프로젝트를 진행중 JPA 파트에서 테스트 코드를 작성하다가 보면 분명히 오류가 발생할 것이다. 오류가 발생하는 지점은 콘솔 쿼리 로그를 확인할 때, 설정하기 전에는 H2의 쿼리 문법이 적용되어 id bigint generated by default as identity 라는 쿼리문을 확인할 수 있다. 이 쿼리를 MYSQL의 쿼리문으로 확인하기 위해서는 다음과 같은 코드를 application.properties에 설정을 해야 하는데, spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect 이 쿼리문을 추가하게 되면 발생하는 오류가 윗 오류인데, posts 테이블이 존재하지 않아 쿼리문을 넣을 수 없..

InteliJ-Spring boot-dependencies

백엔드 개발자를 희망하는 사람들이라면 한 번쯤은 사용해보거나, 어디서 보거나 뭐 어찌저찌해서 관심을 가질만한 부분이다. 바로 의존성(depencency)부분이다. 스프링부트는 gradle, maven과 같은 도구들을 이용해 의존성을 관리하는데, Gradle을 기준으로 의존성 관련해서 정리를 해볼려고 한다. (Maven은 사용하기 뭔가 귀찮았음 XML이, Gradle이 더욱 간단하고, 익숙함.) 1. Gradle? 소프트웨어는 거의 단독으로 작동하지 않고, 다양한 라이브러리의 형태나 모듈들, 프로젝트등이 서로 의존하며 모듈화된 시스템을 구성하기 위해 분할되는데, 이때 종속성 관리를 통해 자동화된 방식으로 프로젝트에 필요한 종속성을 선언, 해결, 사용 하는 기술이다. Gradle은 빌드 자동화 도구 中 1개..

스프링/백엔드 2022.03.09

오류명 : java.lang.assertionerror: status expected:<200> but was:<401> 및 소스 코드의 변경, 부제 : 스프링 부트와 AWS로 혼자 구현하는 웹서비스 -저자: 이동욱

정보처리기사 필기가 무사히 끝이나고 다시 스프링 부트 공부를 해보려고 책을 열었다. 본가에서도 해결하지못한 오류를, 학교에 와서 곰곰히 생각해보고 해결한 과정을 한 번 설명하고 어떻게 해결했는지, 뭐가 문제였던건지 나름의 분석을 해보려고 한다. 일단 우선 해당 이 책은 출판된지가 어느덧 3년을 향해 달려가고 있다. 그 사이에는 많은 버전이 업데이트 되었고, 다양한 기능들이 추가되고 삭제되며 코드가 변하기 충분하였다. 앞서 작성한 글 중에 compile과 implement처럼, 책의 버전을 그대로 사용함으로써 코드를 따라가는 것도 좋지만, 나는 그래도 최신버전으로 업데이트 된 상황으로 코드를 작성해보고 싶어서 지속적으로 찾아보고, 코드를 수정해 나아갔다. 일단 우선적으로 제가 실습환 환경은 다음과 같습니다..