전체 글 142

[Web] 브라우저 동작 방법

주소창에 https://www.naver.com 혹은 https://www.youtube.com 등 다양한 URL을 검색하여 해당 웹 페이지에 접속한 경험이 있을 겁니다. 이 url이 입력되었을 때 어떤 과정을 거쳐서 출력되는걸까? 브라우저 주요 기능 사용자가 자원을 서버에 요청하고 요청한 자원(웹 페이지)을 브라우저에 표시하는 것 웹 브라우저가 웹서버에 웹 페이지를 달라고 하는것 : 요청(request) 요청한 웹 페이지를 웹 브라우저에 제공하는 것 : 응답(response) 보통 자원은 HTML 문서지만 PDF, 이미지 등 다양한 형태일 수 있다. 자원의 주소는 URI에 의해 정해진다. 웹 브라우저의 종류는 다양하다. 크롬, 네이버 웨일, 파이어폭스, 사파리 등이 대표적인 예이다. 웹 브라우저의 주요..

CS/Web 2023.01.01

[잡담] 고민되는 코딩테스트

코딩테스트 공부를 다시 시작할지 무척 고민이 된다. 물론 예전만큼 매일 몇 문제씩 풀고 있진 않지만, 간간히 문제를 풀고 있긴 하다. 왜 중단했던 코딩테스트 공부를 다시 시작할까 고민이 되냐면, 친구의 얘기를 듣고서다. 나는 약 3년간 친구들과의 연락을 끊고 지냈다. 뭐 이것도 핑계일 순 있지만, 가장 큰 이유는 자존감이 떨어져서다. 아주 바닥을 쳤었다. (그렇다고 지금 회복된 건 아님) 다들 잘 사는 것 같고 나만 힘든 것 같고 나만 잘 안 되는 것 같고. 이러한 이유들로 지인들과의 연락을 끊고 혼자 은둔생활을 했던 것이다. 혼자 은둔생활을 시작했던 시기는 내가 건축공학 → 컴퓨터공학으로 전과 후 한 해를 보내고, 진지하게 미래에 대한 고민(컴공이 적성에 안 맞는다)을 하면서부터다. 그때부터 사람이 활..

잡담 2023.01.01

스프링 MVC 1편 (3) - MVC 기본 기능

강의 : 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 내가 보려고 씀 섹션 6. 스프링 MVC - 기본 기능 ※ 매핑 정보 @Controller - 반환 값이 String 이면 뷰 이름으로 인식된다. 그래서 뷰를 찾고 뷰가 랜더링 된다. @RestController - 반환 값으로 뷰를 찾는 것이 아니라,HTTP 메시지 바디에 바로 입력한다. 따라서 실행 결과로 ok 메세지를 받을 수 있다. @ResponseBody 와 관련이 있다. 로깅 간단히 알아보기 앞으로 로그를 사용할 것이기 때문에, 로그에 대해서 간단히 알아보자. 운영 시스템에서는 System.out.println() 같은 시스템 콘솔을 사용해서 필요한 정보를 출력하지 않고, 별도의 로깅 라이브러리를 사용해서 로그를 출력한다. packag..

Spring/MVC 2023.01.01

스프링 MVC 1편 (2) - MVC 패턴

강의 : 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 내가 보려고 씀 섹션 3. 서블릿, JSP, MVC 패턴 MVC 패턴 - 개요 Model View Controller 웹 애플리케이션은 보통 이 MVC 패턴을 사용 컨트롤러 HTTP 요청을 받아서 파라미터를 검증하고, 비즈니스 로직을 실행한다. 그리고 뷰에 전달할 결과 데이터를 조회해서 모델에 담는다. 모델 뷰에 출력할 데이터를 담아둔다. 뷰가 필요한 데이터를 모두 모델에 담아서 전달해주는 덕분에 뷰는 비즈니스 로직이나 데이터 접근을 몰라도 되고, 화면을 렌더링 하는 일에 집중할 수 있다. 뷰 모델에 담겨있는 데이터를 사용해서 화면을 그리는 일에 집중한다. 여기서는 HTML을 생성하는 부분을 말한다. ※ 참고 컨트롤러에 비즈니스 로직을 둘 수도 ..

Spring/MVC 2022.12.30

[Java] 자바 스트림(JAVA Stream)

※ Java 8버전 이상부터 Stream API 지원 스트림 Streams이란? 람다를 활용할 수 있는 기술 중 하나. ※ Java 8 이전 배열 또는 컬렉션 인스턴스를 다루는 방법 : for 또는 foreach 문을 돌면서 요소 하나씩을 꺼내서 다루는 방법 문제는? → 간단한 경우라면 상관없지만, 로직이 복잡해질수록 코드의 양이 많아져 여러 로직이 섞이게 되고, 메소드를 나눌 경우 루프를 여러 번 도는 경우가 발생 반면, 스트림은 '데이터의 흐름’이다. → 컬렉션에 저장되어 있는 엘리먼트들을 하나씩 순회하면서 처리할 수 있는 코드 패턴. → 람다식과 함께 사용되어 컬렉션에 들어있는 데이터에 대한 처리를 매우 간결한 표현으로 작성 가능. → 내부 반복자를 사용하기 때문에 병렬처리가 쉽다. ※ 병렬처리 :..

CS/Java (CS) 2022.12.27

[Java] 직렬화(Serialization)

직렬화(Serialization)란? 자바 시스템 내부에서 사용되는 객체(Object) 또는 데이터(Data)를 외부의 자바 시스템에서도 사용할 수 있도록 바이트(byte) 형태로 데이터 변환하는 기술 ※ 쉬운 설명 ● 데이터 직렬화 → 메모리를 디스크에 저장하거나, 네트워크 통신에 사용하기 위한 형식으로 변환하는 것 (자바의 객체를 바이트의 배열(byte[])로 변환) ● 데이터 역직렬화 → 디스크에 저장한 데이터를 읽거나, 네트워크 통신으로 받은 데이터를 메모리에 쓸 수 있도록 변환하는 것 (저장된 것을 다시 객체(Object)로 변화) 직렬화를 하는 이유? → 직렬화가 된 데이터는 언어에 따라서 텍스트 또는 바이너리 등의 형태가 되는데, 이는 파일 저장이나 네트워크 전송 시 파싱이 가능한 유의미한 ..

CS/Java (CS) 2022.12.24

스프링 MVC 1편 (1) - 서블릿, HTTP 요청 & 응답

강의 : 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 내가 보려고 씀 섹션 1. 웹 애플리케이션 이해 서블릿 컨테이너 서블릿 객체는 싱글톤으로 관리 싱글톤? 객체를 딱 하나만 생성해놓고, 그걸 공유해서 쓰는 것. (2 ~3개 new로 생성하지 않음) 왜 이렇게 사용할까? 요청이 다 다르기 때문. 자바 뷰 템플릿 역사 HTML을 편리하게 생성하는 뷰 기능 JSP 속도 느림, 기능 부족 요즘엔 애매함. 스프링부트에서 JSP를 권장하지 않음. 기능도 많이 부족함. 타임리프(Thymeleaf) 내추럴 템플릿 : HTML의 모양을 유지하면서 뷰 템플릿 적용 가능 (태그를 넣어서 문제를 해결) 스프링 MVC와 강력한 기능 통합 (spring에서 밀고 있음) 최선의 선택, 단 성능은 프리마커, 벨로시티가 더 빠..

Spring/MVC 2022.12.22

[Java] Thread 활용

이전 주제들 클린코드 & 리팩토링 & 시큐어코딩 객체지향 프로그래밍 (OOP) 테스트 주도 개발 (TDD) String, StringBuffer, StringBuilder 타입변환 Casting (업캐스팅 & 다운캐스팅) 오토 박싱 & 오토 언박싱 설명이 잘 되어있는 블로그! https://connie.tistory.com/12 Thread (스레드)란? 운영체제나 JVM에서 태스크(작업)을 실행하는 단위 → 하나의 스레드는 하나의 작업밖에 수행할 수 없다. ※ Java에서 스레드(Thread)란 무엇인가? → 스레드를 사용하기 전 기존 자바에서는 car.open(); car.entrance(); 이렇게 코드 두 줄이 있다고 하면 car.open()을 수행한 후에 car.entrance();를 수행하게 ..

CS/Java (CS) 2022.12.21

[잡담] 티스토리와 Velog에 대한 나의 생각

원래는 Velog를 사용하다 어제부터 티스토리로 옮겨왔다. Velog는 구글 계정으로 간편하게 가입 가능해 접근성이 높고, 마크다운 문법으로 사용하는 것이다 보니 적응하기가 빨라서 선택했었다. 원래는 혼자서 공부를 했었지만, 기록이 남지 않는다는 것에 대한 걱정으로 블로그를 시작하게 되었다. 내가 아무리 뭘 했다고 한들 기록이 남는 게 없으면 아무도 믿지 않을 것이다. 그래서 부랴부랴 블로그를 시작하게 되었다. 개발자에겐 1일 1커밋이 유행이라던데, 어떤 사람들은 의미없는 커밋(제목 하나 수정하고 커밋 등)으로 잔디를 채운다면 1일 1커밋은 의미 없다고 말하는 사람도 있었다. 사실 나도 처음엔 무의미한 커밋으로 잔디를 채웠지만, 이제는 그렇게 하진 않는다. 하지만 그렇다보니 잔디가 너무 텅텅 비는 것이었..

잡담 2022.12.20

스프링 데이터 JPA - (2)

출처 : 실전! 스프링 데이터 JPA 내가 보려고 씀 섹션 4. 쿼리 메소드 기능 8. 순수 JPA 페이징과 정렬 JPA에서 페이징을 어떻게 할 것인가? 9. 스프링 데이터 JPA 페이징과 정렬 페이지를 유지하면서 엔티티를 DTO로 변환하기 → 엔티티를 외부에 그대로 반환하면 안 됨. 10. 벌크성 수정 쿼리 JPA는 엔티티 객체 중심 11. @EntityGraph ※ 선행 : 페치조인이란? → 지연로딩과 그로인해 발생하는 문제들을 이해해야 함. → N + 1 문제 : 페치조인으로 해결 // 영속성 컨텍스트에 있는 캐시 정보들을 DB에 완전히 다 반영을 해서 // insert를 정확하게 다 하고, // 데이터베이스에 다 반영을 시킨 다음에 // 영속성 컨텍스트를 다 날리는 것 em.flush(); em...

Spring/JPA 2022.12.20