🐰 전체 글
🚧
아무것도 없어요😢
-
티스토리 게시글 목차 만들기✍️🎁 Index 내가 쓴 포스팅을 가끔 참고할 일이 생긴다. 원하는 부분만 슥삭쇽 찾아서 보고싶은데, 포스팅이 길다보니 계속 스크롤을 내려서 찾아줘야 했다. 벨로그는 자동으로 목차를 생성해주는 것 같던데... 목 마른 자가 우물 판다고 바로 만들어보았다😀 ⛏️ 목표는 이런 목차를 만드는 거였다. 포스트 옆 오른쪽 상단 빈 영역에 목차가 생긴다. 스크롤을 내려도 목차는 같은 위치에 고정되어 있다. 페이지가 너무 좁거나 스크롤이 포스트 영역을 벗어나면 목차는 나타나지 않는다. 제목1, 제목2에 대해 목차가 생긴다. 목차를 누르면 해당 소제목으로 스크롤이 이동한다. 스크롤을 내리면 목차에서 내가 현재 위치하고 있는 소제목에 강조 효과가 생긴다. 👉 목차 영역 생성 HTML 목차로 만들어줄 #index를 생성한다..🎨 UI2023.05.29
-
[Spring] 트랜잭션 xml 설정트랜잭션에 대한 개념은 여기로 🔗 📁 트랜잭션 데이터베이스의 상태를 변화시키는 논리적 작업단위 계좌에 있는 돈을 타인에게 송금하는 프로그램을 만들 때에는 다음 두가지 작업을 구현해야 한다. 내 계좌에서 돈을 출금한다. 타인의 계좌에 돈을 입금한다. 1번 과정은 순조롭게 마무리 됐는데... 만약 2번에서 에러가 발생한다면? 내 계좌에서 출금은 됐는데 입금을 받지 못해 돈이 증발될 것이다. 따라서 두 작업을 하나의 트랜잭션으로 묶고 정상적으로 작동하면 커밋하고 에러가 나면 롤백하는 처리가 필요하다. 스프링에서는 트랜잭션 적용을 돕기 위해 Spring AOP를 활용하고 추상화를 제공한다. xml 설정파일을 통해 프로젝트의 Service 단에서 트랜잭션 처리를 해보자. 👆 pom.xml 트랜잭션 처리를 위한 d..🌿 Spring2023.05.25
-
정렬 알고리즘 : 버블정렬, 선택정렬, 삽입정렬가장 기본적인 정렬 알고리즘으로 버블정렬, 선택정렬, 삽입정렬을 들 수 있다. 빅오표기법에 따르면 O(N^2)의 시간복잡도를 가진다. java로 이 세가지 정렬 알고리즘을 구현해보자. 📁 버블정렬 Bubble Sort 인접한 두 원소의 값을 비교하여 자리를 교환하는 정렬 알고리즘 버블정렬은 비교와 교환 두 종류의 단계를 거친다. ⏳ 과정 인접한 두 원소의 값을 비교한다. 두 값의 순서가 바뀌어 있을 경우, 교환(swap)한다. 1~2의 패스스루가 끝나면 정렬되지 않은 값 중 가장 큰 값, 즉 '버블'이 맨 오른쪽 위치로 이동한다. 따라서 다음 패스스루는 제대로 정렬된 마지막 인덱스를 제외하고 이루어진다. 💻 소스코드 static void bubbleSort(int[] arr) { int temp; // ..🎮 알고리즘2023.05.24
-
서블릿 컨테이너와 쓰레드🌟 멀티쓰레드 지원 및 관리 서블릿 컨테이너는 요청이 들어올 때마다 새로운 쓰레드를 생성해 동시 요청을 처리할 수 있도록 한다. 쓰레드는 HTTP 메서드를 통해 요청을 처리한 후 자동으로 죽도록 해 안정적으로 관리한다. 그러나 쓰레드를 생성하는 것은 꽤나 큰 비용을 요구한다. 그럼에도 불구하고 매번 쓰레드를 생성하는 이유는 무엇일까? 💡 동시 요청 처리 결론적으로, 서블릿 컨테이너가 멀티쓰레드를 지원하는 것은 동시다발적으로 들어오는 요청을 처리하기 위함이다. 자바 애플리케이션은 최소 하나 이상의 쓰레드를 가지고 있다. 기본적으로는 프로그램을 실행하면 메인쓰레드가 생성되고 그 위에 메인메서드를 적재한다. 하나의 쓰레드에서는 한번에 하나의 코드라인만 수행할 수 있다. 한번에 여러 코드라인을 수행하기 위해서는..🌐 웹2023.05.21
-
서블릿 컨테이너📁 서블릿 컨테이너 서블릿의 생성, 실행, 파괴 등 서블릿을 관리해주는 컨테이너 서버에 만들어진 서블릿은 스스로 동작하지 못하고, 톰캣과 같은 컨테이너 하에서 실행될 수 있다. 이처럼 서블릿을 관리하는 컨테이너를 서블릿 컨테이너 혹은 웹 컨테이너라고 한다. 서블릿 컨테이너의 역할 👆 웹서버와 통신 지원 클라이언트의 요청을 받고 응답할 수 있도록 웹서버와 소켓으로 통신한다. 서블릿 컨테이너가 없다면 소켓 연결, 메세지 파싱 등의 과정을 직접 구현해야 해 매우 번거롭다. 👆 서블릿 생명주기 관리 서블릿 클래스 로드, 인스턴스화, 초기화, 요청에 따른 적절한 HTTP 메서드 호출을 모두 처리한다. 서블릿의 생명주기가 다 할 경우 가비지컬렉션을 진행한다. 👆 싱글톤 객체 요청이 들어올 때마다 서블릿 객체를 생성..🌐 웹2023.05.21
-
[Java] 쓰레드📁 프로세스와 쓰레드 프로세스 Process 실행 중인 프로그램 프로그램을 실행하면 OS로부터 자원을 할당받아 프로세스가 된다. 프로그램을 수행하는 데에 필요한 데이터/메모리 등 자원과 쓰레드로 구성되어 있다. 쓰레드 Thread 프로세스의 자원을 이용하여 실제 작업을 수행한다. 프로세스가 공장이라면 쓰레드는 일꾼이라고 볼 수 있다. 모든 프로세스는 쓰레드를 최소 1개 이상 가지고 있다. 멀티쓰레드 하나의 프로세스 내에서 두개 이상의 쓰레드가 동시에 작업을 수행하는 것. 동시에 처리될 수 있는 쓰레드의 수는 CPU의 코어 갯수와 일치한다. 멀티쓰레드의 장점 CPU 사용률 향상 자원의 효율적 사용 응답성 향상 간결한 코드 멀티쓰레드의 단점 동기화 교착상태 기아현상 📁 쓰레드의 구현 Thread, Runna..🌷 Java2023.05.19
-
[Java] Scanner 클래스 버퍼 비우기📁 Scanner Scanner는 사용자로부터 편리하게 입력을 받기 위한 목적으로 JDK1.5부터 추가된 클래스이다. 자바 학습 초기에 특히 유용하게 사용했던 클래스인데, 사용 시 주의해야 할 부분이 있다. import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String name = sc.nextLine(); int age = sc.nextInt(); String job = sc.nextLine(); System.out.printf("%s(%d, %s)", name, age, job); } } nextLine(), nextInt() 메서드를 사용해..🌷 Java2023.05.19
-
프레임워크와 라이브러리🧑💻 프레임워크와 라이브러리의 차이는 무엇인가? 면접에서 꼭 한번씩 듣게 되는 질문이라고 한다. 포트폴리오를 만들 때 내가 사용한 기술의 종류를 정리하면서 뭐가 프레임워크고 뭐가 라이브러리인지 애매하게 느껴졌다. 프레임워크와 라이브러리에 대한 정확한 개념이 잡혀있지 않기 때문이었을 것이다. 오늘 포스팅에서 이 둘의 차이를 정리해보자. 📁 프레임워크 Framework 프로그램의 골격, 뼈대 프레임워크란 프로그램 개발에 필요한 기본적인 요소와 규칙을 가지고 있는 기본적인 틀, 구조를 의미한다. 웹 애플리케이션 개발에 필수적인 코드, 알고리즘, DB 연동 등 기능들을 위한 기본적인 뼈대를 제공한다. 개발자는 프레임워크가 정해둔 규칙에 따라 온전히 기능 구현에만 집중할 수 있어 편리한 개발이 가능하다. Spr..🐶 개발지식2023.05.17
-
쿠키와 세션🥖 쿠키와 세션 쿠키와 세션을 사용하는 이유는 비연결지향, 상태없음이라는 HTTP 프로토콜의 두가지 특성에 기반하고 있다. 비연결지향 Connectionless HTTP 환경에서 클라이언트가 요청 메세지를 보내면 서버는 적절한 응답을 보내고 연결을 끊어버린다. HTTP1.1 버전에서는 헤더에 keep-alive 옵션을 두고 커넥션을 계속 유지해 요청에 재활용하는 기능이 추가되었다. 그러나 아직까지는 비연결지향적 특성으로 커넥션 관리에 대한 비용을 줄이는 것을 효율적으로 보는 시각이 많다. 상태없음 Stateless 커넥션을 끊는 순간 클라이언트와 서버의 통신은 끝나며, 이 상태정보는 유지되지 않는다. 클라이언트와의 첫 통신에서 데이터를 주고받았다고 해도, 그 다음 통신에서 그 데이터는 유지되지 않는 것이..🌐 웹2023.05.15
-
[Spring] 스프링 Bean📁 Bean 스프링에서의 객체 기존 자바 프로그래밍에서 객체를 생성하기 위해서는 클래스를 만들고 new 연산자를 이용해 직접 인스턴스를 생성했다. 그러나 스프링은 프로그램의 제어권을 가지기 위해 자바 객체를 자신만의 형태로 바꾸고, Bean이라고 칭한다. 객체를 Bean으로 등록한다는 것은 곧 객체의 제어권을 스프링 컨테이너로 넘긴다는 것을 의미한다. 📁 스프링 컨테이너 빈을 관리하는 컨테이너 싱글톤 레지스트리, 의존성 주입, AOP 등 여러 기능들을 제공하고 빈의 생명주기를 관리한다. 🤔 싱글톤 Singleton 스프링은 기본적으로 싱글톤으로 빈을 생성하여 매 요청마다 같은 객체를 돌려준다. 매번 새로운 객체를 생성하는 것보다 이미 생성된 객체를 가져오는 것이 효율적이기 때문이다. 서버의 규모가 커지면..🌿 Spring2023.05.15