컴퓨터 구조를 배우는 이유모든 프로그램은 컴퓨터 부품이 실행한다: 성능 & 용량 & 비용 이 세 가지가 컴퓨터 공학을 학습해야 하는 이유다. 컴퓨터 구조프로그램을 이루는 두 정보 (0과 1로 이루어진 정보)명령어 instruction데이터 data컴퓨터의 네 가지 핵심 부품CPU레지스터 - 작은 임시 저장장치, 여러개일수 있다.ALU - 계산기 회로, overflow 검출기제어 장치 - 명령어를 실질적으로 해석해주는 장치, 제어 신호를 내보내주는 장치메인 메모리 & 캐시 메모리(CPU가 메인메모리에 접근하는 시간을 조금 더 줄여주기 위한 보조적인 저장공간)메인 메모리에는 주소가 있다.보조기억장치입출력장치+ 위 네 가지 핵심 부품을 한데 모아서 저장해주는 곳을 '마더 보드'라고 한다.+ 메인 보드(마더 보..
분류 전체보기
2024.07.16 AI란?artificial intelligence단순 소수 분별하는 코드랑 마리오 게임을 실제로 진행할 수 있는 인공지능과 chat gpt의 차이가 뭘까입력: 소수 분별하는 코드는 숫자를 입력으로 받는다. 마리오 게임을 자동으로 플레이하는 경우 이미지와 오브젝트 정보를 입력으로 받을 수 있다.학습 과정: 소수 구분은 정해진 알고리즘에 따라 동작한다. 마리오 게임의 경우 강화학습을 통해 학습할 수 있다.챗지피티: 챗GPT는 딥러닝 기반의 언어 모델이다. 지도학습 vs 비지도학습지도학습: 사람이 데이터를 만들고 정답을 제공한다. 머신러닝과 딥러닝 모두에 사용될 수 있지만 주로 머신러닝에서 사용된다.비지도학습: 사람이 데이터를 제공하지만 정답을 알려주지 않는다. 딥러닝은 주로 신경망(ne..
📌 서론우리는 현재 redis에 정보를 넣어놓고 거기서 조회하고 삭제하고 저장하는 작업을 하고 있다. 그런데 동일한 프로젝트를 2개의 인스턴스로 띄우기 때문에 redis에 동시성 이슈가 생기는 것을 방지해야 했다. 여기서 동시성 이슈를 해결하기 위해 적용한 방법을 간단하게 소개해보려고 한다. 동시성 이슈 해결을 위한 Redis Lock동시성 이슈는 여러 프로세스나 스레드가 동일한 자원에 동시에 접근할 때 발생할 수 있는 문제를 의미한다. 이러한 문제를 해결하기 위해 Redis를 사용한 잠금 메커니즘을 활용할 수 있다. 동시성 이슈란?동시성 이슈는 여러 프로세스나 스레드가 동시에 같은 자원에 접근할 때 발생할 수 있는 문제를 말한다. 예를 들어, 두 개의 인스턴스가 같은 Redis 데이터베이스에 접근하여..
📌 서론그동안 Redis가 key-value를 저장하는 저장소라고 들어서 그냥 간단한 "category":1 같은 것만 저장하는 줄 알았다. 그러나 Redis에서도 key 값에 객체나 List를 넣을 수 있다는 것을 알게 되었다.실제로 프로젝트를 진행하면서 DB에서 자주 조회되는 카테고리를 레디스에 저장해야할일이 생겼다. 이 과정에서 알게된 어노테이션과 각 쓰임새를 정리해 보자. @RedisHash@RedisHash 어노테이션은 Spring Data Redis에서 사용되는 어노테이션으로, Redis에 객체를 해시 형태로 저장할 때 사용된다. 이 어노테이션은 Redis에 저장될 엔티티 클래스를 정의하는 데 사용되며, 해시 키를 지정할 수 있다. @RedisHash 어노테이션을 사용하여 Redis에서 데이..
지금까지 JAVA에서 '제네릭'이라고 하면 그냥 T로 작성해서 어떤 객체든 들어올 수 있게 하는 것 정도로만 이해하고 있다가 이번에 인터넷 강의를 들으면서 제네릭이 생각보다 더 많이 쓰이고 더 많은 내용을 담고 있어서 한번 이해해 보고자 나름대로 정리해 봤다. JAVA 제네릭Java에서 제네릭(Generic)은 코드의 재사용성을 높이고 타입 안전성을 강화하기 위한 중요한 기능이다. 이번 포스트에서는 제네릭의 개념과 함께 TraceTemplate 클래스 예시를 통해 제네릭 메서드가 어떻게 사용되는지 자세히 살펴보겠다. 제네릭이란?제네릭은 코드를 작성할 때는 타입이 결정되지 않지만, 실행 시점에 타입이 결정되도록 하는 기법이다. 이는 주로 컴파일 타임에 타입 검사를 강화하고, 런타임 시 타입 안정성을 보장하..
코드를 짜다가 foreach문을 중첩으로 사용하는 경우가 생각보다 자주 있다. 이를 더 개선할 방법이 없을까 하다가 이번에 새롭게 알게 된 문법을 소개해보려고 한다. Function.identity()Function.identity()는 Java 8에서 도입된 함수형 프로그래밍 인터페이스 중 하나인 Function 인터페이스의 정적 메서드이다. 이 메서드는 입력 값을 그대로 반환하는 함수 객체를 생성하는 데 사용된다. 즉, Function 타입의 객체로서, 입력 값을 변경하지 않고 그대로 반환한다.import java.util.function.Function; 예제: Function.identity() 사용다음은 Function.identity()를 사용하여 리스트를 맵으로 변환하는 예시 코드이다:i..
이전 글에서 기본적인 MapStruct 라이브러리를 사용하는 방법을 알아봤다. 기본 사용법에서 더 나아가서 더 복잡한 로직을 구현할 수 있는 어노테이션도 알아보자! @AfterMapping@AfterMapping 어노테이션은 대상 타입의 객체가 매핑된 후 추가적인 커스텀 로직을 실행하고 싶을 때 사용된다. 이 어노테이션은 매핑 과정이 끝난 직후에 호출되므로, 매핑되지 않은 필드를 수동으로 설정할 수 있다. @Named@Named 어노테이션은 특정 매핑 메서드에 이름을 부여하여, 매핑 대상 필드에서 이 메서드를 지정하여 사용하고자 할 때 적용된다. 이를 통해 복잡한 매핑 로직이나, 다양한 상황에 따른 매핑 로직을 구현할 수 있다. 어노테이션 사용 예시 코드Entity (Question.java)@Gette..
MapStruct란?MapStruct는 Java 기반의 라이브러리로, 객체 간의 매핑을 손쉽게 도와주는 코드 생성기이다. 이 라이브러리는 주로 서비스 계층과 데이터 접근 계층 사이, 또는 다양한 계층 간의 데이터 전송 객체(DTO)와 도메인 또는 엔티티 객체 간의 변환 작업을 자동화하기 위해 사용된다. 개발자는 변환 로직을 직접 작성하는 대신, 인터페이스에 어노테이션을 사용하여 어떤 필드가 어떻게 매핑되어야 하는지를 선언적으로 정의한다. 그 후, MapStruct는 이 인터페이스를 기반으로 구현 클래스를 자동 생성한다. 이 과정은 프로젝트의 컴파일 시점에 이루어지므로, 런타임 시에 추가적인 성능 저하 없이 매핑 로직을 실행할 수 있다. MapStruct 동작 원리MapStruct의 핵심 동작 원리는 다음..