일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- 스프링
- Container
- mysql
- computer science
- 가상화
- JPA
- Java
- spring boot
- web server
- Spring Security
- ORM
- 컨테이너
- 백엔드
- 데이터베이스
- 스프링 시큐리티
- Spring
- 영속성 컨텍스트
- 웹 서버
- 배포
- 스프링 부트
- spring batch
- 자바
- virtualization
- CI/CD
- 도커
- 스프링 배치
- vm
- spring cloud
- CS
- HTTP
- Today
- Total
목록Back-End/Java (17)
개발 일기

자료구조(Data Structure)란?컴퓨터 프로그램에서 데이터를 효율적으로 저장하고 관리하기 위해 설계된 구조로 Array, List, Map 등이 대표적이다.배열(Array)배열은 인덱스와 값을 일대일 대응해 관리하는 자료구조데이터를 저장할 수 있는 모든 공간은 인덱스와 일대일 대응하므로 어떤 위치에 있는 데이터든 한 번에 접근할 수 있다.일반적으로 배열은 선언할때 크기가 고정특정 인덱스에 있는 데이터를 읽거나 변경하는 데 O(1)의 시간 복잡도데이터를 순차적으로만 접근할 수 있어 위치를 모르는 경우 효율이 떨어짐.배열에 들어가는 데이터는 모두 동일한 자료형 이어야 함.배열 중간에 값을 추가하려면 기존 데이터를 모두 이동시켜야 함.// 1차원 배열int[] arr = {0, 0, 0, 0, 0, 0..

알고리즘 문제를 풀어보면 제한 시간이 있는 것을 확인할 수 있다. 시간 복잡도 (Time Complexity)알고리즘에서 시간 복잡도는 주어진 문제를 해결하기 위한 '연산 횟수'로 잡는다. 즉, 소요되는 기본 연산 수에 의거하여 시간복잡도가 계산되는데 여기서 주요 기본 연산으로는 데이터의 비교, 덧셈, 곱셈, 나눗셈 등이 있다.일반적으로 수행 시간은 1억번의 연산을 1초로 잡는다.알고리즘의 성능을 나타내는 지표로, 입력 크기에 대한 연산 횟수의 상한을 의미합니다. 시간 복잡도는 낮으면 낮을 수록 좋다.그런데 이러한 생각이 들었다. '예를들어 1차원 배열의 경우 탐색하고자하는 배열마다 만약 찾고자하는 값이 index 0에 있냐 아님 배열의 가장 마지막 Index에 위치하냐에 따라 연산 횟수가 달라지지 않나..

코테에서 터미널에서 입력받는 로직을 처리해야하는 경우가 있다. 크게 Scanner 클래스와 BufferedReader 클래스를 통해 처리할 수 있을텐데 이 두개를 중심으로 정리해보고자 한다.ScannerScanner란 사용자로 부터 입력을 받을 수 있도록 도와주는 것으로 콘솔창에서 입력이 필요할때 사용java.util.Scanner 패키지에 포함상대적으로 BufferedReader에 비해서 사용하기 용이한 메서드들을 클래스에서 많이 제공데이터를 파싱하기 위해서 내부적으로 정규 표현식 등을 사용하여 BufferedReader에 비해 내부적으로 복잡한 과정을 거쳐 처리 시간이 더 오래 걸린다. ➜ "작은 접시를 가지고 계속 오가며 음식을 조금씩 담아요"라고 타 블로그에서 설명했다.입력량이 고정되어 있고, ..

JDBC(Java Database Connectivity)란?JDBC(Java Database Connectivity)는 Java에서 데이터베이스에 접속할 수 있도록 하는 Java 표준 API이다.즉, JDBC API를 통해 자바 코드로 데이터베이스를 연결할 수 있고, SQL 쿼리문을 보내서 쿼리를 실행하며 결과 값을 받아올 수 있다. JDBC는 Java 애플리케이션 내에서 JDBC API를 사용하여 데이터베이스에 접근하는 단순한 구조이다. JDBC를 통한 DB 연동 흐름 1. 드라이버 로딩JDBC 드라이버를 사용하여 Java 애플리케이션이 데이터베이스와 통신할 수 있도록 하는 첫 번째 단계.DriverManager 클래스는 JDBC 드라이버를 관리하는 역할을 한다.그러나 JDBC 4.0부터는 드라이버가..

정리하게된 계기스프링 부트를 쓰게되면서 접근 제어자를 고민할때가 정말 많다. 그러나 사실 정확히 알지 못하고 그냥 때려맞추거나 Best Practice를 무작정 매번 따라 가려고한다. 근데 정확히 왜 이게 주로 이렇게 접근 제어자를 설정하는지 이해하면서 개발을 진행하고 싶고 그러기 위해서는 접근 제어자에 대해서 잘 알고 있어야한다는 판단이 섰다. 그래서 정리해보게 됐다.접근 제어자(Access Modifier)란?자바에서 접근 제어자는 클래스와 클래스의 멤버인 필드, 메소드, 생성자를 생성할 때 외부에서 접근할 수 있는 범위를 제한해주는 장치이다.크게 클래스의 접근 제어자와 클래스 멤버의 접근 제어자 이렇게 두가지로 나누어서 고려해볼 수 있다. 클래스의 접근 제어자클래스를 정의할 때 지정 가능한 접근 ..

적용하게된 계기힘겹게 Nginx와 스프링 프로젝트를 git actions로 배포를 하여 실행을 시켜놓고나니까 그제서야 든 생각이 있었다. 그래서 로그는 어떻게 확인할건데? 내가 매번 docker logs를 찍어서 봐야하나..? 근데 이 로그 양이 많아지면 어떻게 될까? 라는 생각이 문득 들었다. Express로 서비스를 했을때는 nohup이라는 모듈을 통해 파일로 저장했던 기억이 있어서 찾아봤더니 역시 Spring Boot에서도 이런 것을 담당해주는 라이브러리가 존재해서 우선 자바 진영 로깅 프레임워크를 쭉 훑어보겠다.로깅(Logging)print(), System.out.println(), console.log() 등으로 개발하는 중간 중간에 로그를 열심히 찍어서 내가 의도한대로 동작하고 있는지 확인..

처음 특정 언어를 배울때 "Python, JavaScript는 인터프리터 언어이다.", "C, C++ 등은 컴파일 언어이다." 이런식으로 분류하는 경우를 봤었는데 그냥 그렇게 알기만 알았지 이것에 대해 깊게 생각해보진 않았다. 또한 이전 게시글에서 자바 소스 코드가 JDK의 자바 컴파일러인 javac에 의해 바이트 코드로 변환되고 그 바이트 코드는 인터프리터에 의해 해석되거나 JVM에서 JIT 컴파일러를 통해 기계어로 변환한다고 했었다. 이때 JVM은 바이트 코드를 해석하고 실행하는 인터프리터 역할을 수행하고 JVM 내부의 JIT 컴파일러를 통해서도 바이트 코드를 기계어로 변환한다고 했다. 이렇게 컴파일러와 인터프리터가 어떤 차이가 있는지 자바에서 왜 JIT 컴파일러를 도입했고 JIT 컴파일러에 대해서도..

군대가기전 대학교 2학년 처음 자바를 접할때 부터 자바하면은 JDK, JRE, JVM 이런 용어들이 무진장 나왔고 비슷 비슷한 단어에 혼란이 있었지만 그 당시에 문법 익히기에 급급했던 터라 기본적인 것을 놓치고 학습했던 것같다. 이번에 확실히 정리해두자. JDK (Java Development Kit) JDK는 자바 개발키트 Java Development Kit의 줄인 말로 개발자들이 자바로 개발하는 데 사용되는 SDK이다. 그래서 JDK안에는 자바를 개발 시 필요한 라이브러리들과 javac, javadoc 등의 개발 도구들을 포함되어 있고, 개발을 하려면 자바 프로그램을 실행도 시켜줘야 하기 때문에 뒤에서 배울 JRE(Java Runtime Environment)도 함께 포함되어 있다. Developm..