자바(Java)는 프로그래밍 언어 중 하나로 객체 지향 프로그래밍(Object-Oriented Programming, OOP)을 지원합니다. 자바에서 메서드에 인수를 전달하는 방식에 대한 논쟁은 꽤 오래되었습니다. 이 블로그 글에서는 자바가 Call by Value인지 Call by Reference인지에 대해 자세히 살펴보겠습니다. Call by Value와 Call by Reference의 개념 먼저 이 두 용어의 개념을 이해해야 합니다. Call by Value: 메서드에 인수를 전달할 때 값(value)만 전달되고, 원래 변수의 주소가 전달되지 않습니다. 이 경우 메서드 내에서 인수의 값이 변경되더라도 원래 변수의 값은 변하지 않습니다. Call by Reference: 메서드에 인수를 전달할 때..

전체 글
요약: 프로세스와 쓰레드는 독립적인 실행 단위이지만, 그들 간에는 중요한 차이점이 있습니다. 이 글에서는 프로세스와 쓰레드의 차이점과 각각의 특징을 구체적으로 살펴보겠습니다. 1. 프로세스(Process)란? 프로세스는 실행 중인 프로그램의 인스턴스입니다. 프로세스는 각각의 메모리 공간, 코드, 데이터, 그리고 시스템 자원을 포함하며, 이들은 서로 독립적입니다. 프로세스는 운영 체제에 의해 관리되며, 서로 다른 프로세스 간에 자원을 공유하지 않습니다. 2. 쓰레드(Thread)란? 쓰레드는 프로세스 내에서 실행되는 독립적인 실행 흐름입니다. 쓰레드는 프로세스의 메모리 공간과 시스템 자원을 공유하며, 각 쓰레드는 자신만의 레지스터, 스택, 프로그램 카운터 등을 가집니다. 쓰레드는 경량 프로세스라고도 불리며..

요약: 컨텍스트 스위칭은 운영 체제에서 프로세스나 쓰레드 간 전환을 가능하게 하는 과정입니다. 이 글에서는 컨텍스트 스위칭의 개념, 원리, 그리고 그 과정에서 발생하는 오버헤드에 대해 설명합니다. 1. 컨텍스트 스위칭(Context Switching)이란? 컨텍스트 스위칭은 프로세스나 쓰레드의 실행 상태를 저장하고 다른 프로세스나 쓰레드의 상태를 복원하는 과정입니다. 이 과정을 통해 여러 프로세스나 쓰레드가 동시에 실행되는 것처럼 보이게 합니다. 컨텍스트 스위칭은 운영 체제에서 멀티태스킹을 가능하게 하는 중요한 기술입니다. 2. 컨텍스트 스위칭의 원리 컨텍스트 스위칭은 다음 단계를 거쳐 진행됩니다: 현재 실행 중인 프로세스나 쓰레드의 상태를 저장합니다. 스케줄러가 다음 실행할 프로세스나 쓰레드를 결정합니..
회사에서도 springboot를 하고 있지만, 면접에서 springboot를 왜 사용하냐를 물어본다면 회사에서 사용해서요 라고 말하기에는 부적절한 답변이 될 거 같기도 하고, 이 토픽에 대해서 한 번 쯤은 고민할 필요가 있어보여서 글을 써 본다. 내가 생각하는 spring framework를 사용한 이유는 다음과 같다. 1. DI(의존성 주입) 기반으로 해서 객체지향 프로그래밍을 할 수 있다. 2. AOP를 통해서 트랜젝션 관리, 로깅, 보안에 대한 기능을 쉽게 구현이 가능하다. 3. 대형 프로젝트를 할 시에 유지보수 및 확장성이 높은 코드를 집어넣기 용이한 부분이 있다. 4. MVC 패턴으로 개발가능하다. 5. 다양한 라이브러리와 프레임워크를 연동해서 개발가능하다. (gradle, maven)
저번에 이어서 mockito에 대해 설명을 할까 한다. 저번 junit 테스트 했을 때는 일일히 게시판쓰기를 통해서 db에 데이터가 추가가 되고 그걸가지고 테스트를 하였는데, 매번 그렇게 하면 번거로운 부분도 있고, 상황에 따라서 데이터를 맞춰야하는 부분도 생긴다. mockito를 이용하면, 굳이 맞출려고 할 필요없이 어떤 예측한 값이 나온다고 가정을 해서 개발자가 정할 수 있게 되서, 테스트를 하는데 좀 더 편리하게 할 수 있는 장점을 가진다. 일단 mockito 정의를 보면? Mockito란 가짜(Mock) 객체를 지원하는 테스트 프레임워크 @ExtendWith(MockitoExtension.class) 어노테이션을 테스트 클래스에 붙여 사용할 수 있다. 유닛테스트를 할 때, 위의 Mockito를 통..

회사에서 설계/개발을 하고 테스트를 기존에 만들어진 웹 페이지로만 진행했기 떄문에, 군데군데 숨어있는 버그를 찾지 못하고 짜짤짜잘한 이슈들이 나오는 경우가 있었다. 최근에 유튜브에서 더 나은 개발자로 성장하기 위해서는 테스트코드를 잘 작성하라는 말이 나오면서 이번에 springboot에 존재하는 junit에 대해 다뤄볼까 한다. Junit이란? - Java에서 단위테스트를 지원해주는 프레임워크 Junit 문법 @BeforeClass : 테스트 시작시 1번만 호출 @Before : 테스트 시작전 호출 @After : 테스트 완료시 호출 @AfterClass : 모든 테스트 완료시 1번 호출 Junit 간단소스 import org.junit.After; import org.junit.Before; impor..
AOP이란? AOP(Aspect Orient Programming), 관점지향 프로그래밍이라고 하며, 공통된 영역와 비즈니스 로직을 구분하고 필요한 곳에 비즈니스 로직만 구현하겠끔 집중하게 도와준다. 장점 1. 코드 중복 줄어듬 2. 공통된 영역과 비즈니스 로직이 구분돼 개발이 좀더 용이해짐 용도 1. 로깅 2. DB 트랜젝션 3. vaildation ... 기본적인 문법 JoinPoint: 현재 실행되고 있는 패키지 영역 PointCut: 어떤 패키지 JoinPoint를 사용할 것인지를 결정 실행하고 있는 모듈을 사용자가 원하는 범위까지 조절할 수 있다. Advice: 각 JoinPoint에 삽입되어져 동작할 수 있는 코드 Before : 조인포인트 전에 실행 AfterReturning : 조인포인트에..

SpringBoot / Gradle 기반으로 설정되었고, 버젼은 다음과 같습니다. Springboot Version 5.3.5 gradle Version 6.8.3 build.gradle은 다음과 같이 포함해주시면 되겠습니다. dependencies { ~ compile("org.slf4j:slf4j-api:1.7.7") compile('ch.qos.logback:logback-classic:1.1.2') ~ } 그 다음에는 /src/main/resource 경로에 'logback-spring.xml' 파일을 만들고 다음과 같이 작성을 합니다. %d{yyyy-MM-dd HH:mm:ss.SSS}[%-5level] : %msg%n INFO test.txt test-%d{yyyy-MM-dd}.%i.txt 10..
회사서 자바소스를 k8s 파드에 올리게 되면서 디펜더시 관련해서 문제가 발생해 애를 먹었기에 공부가 필요하다고 생각이 들었다. 그래서 이번 기회에 정확하게 정의를 정확하게 인지하기 위해 블로그에 정리를 할까 한다. plugins { id 'org.springframework.boot' version '2.4.3' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' } group = 'com.test' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' repositories { mavenCentral() } dependencies { implementation 'org.springfr..

1. 동기(Synchronous) 요청과 동시에 응답이 오는 경우를 의미한다. 요청과 응답은 거의 동시에 일어난다 보면 됨 요청과 응답에 대한 작업단위를 트렌젝션(Transcation) 이라 부른다. 요청을 하는 데 도중에 오류가 발생하면 응답값을 받을 수 없는 상황이기에 동기화가 이루어 질 수 없음 예) 사이트 접속, 카드결제 사이트 접속을 하는데 도중에 오류가 걸리면 응답값을 받을 수 없는 상황이기에 페이지 화면을 제대로 못 봄 2. 비동기(Asynchronous) 동기와 반대로 요청과 동시에 응답이 바로 오지 않음 요청을 한 후 응답이 오길 기다리지 않고, 다른 요청을 할 수 있기 때문에 자원을 효율적으로 쓸 수 있음 예) 이메일 상대방에게 이메일을 보낼지라도 해당 회신이 즉시 오지 않을 수 있다.