본문 바로가기

전체 글22

운영체제란? 운영체제란? 정의 컴퓨터 시스템의 하드웨어, 소프트웨어적인 자원들을 효율적으로 운영 및 관리함으로써 사용자가 컴퓨터를 편리하고, 효과적으로 사용할 수 있도록 하는 시스템 소프트웨어입니다. 컴퓨터 하드웨어 바로 위에 설치되어 사용자 및 다른 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층 즉, 중개자 역할을 해주는 프로그램입니다. 종류 크게 임베디드, 서버, 모바일, 데스크톱 4개의 시장으로 나누어져 있고, 임베디드는 리눅스 계열, 서버는 유닉스 계열, 모바일은 안드로이드, 데스크톱은 윈도우 계열의 점유율이 가장 높습니다. 기능 프로세스 관리 : OS에서 동시에 실행되는 많은 프로세스를 효율적으로 관리 파일 관리 : 파일 생성, 수정, 삭제, 조작, 백업 등등 네트워크 관리 : 네트워크 서비스 성능, 오류.. 2022. 11. 8.
컴퓨터 구조란? 컴퓨터는 무엇인가? 정의 : 컴퓨터는 명령어 리스트를 따라 데이터를 조작하는 기계 구성요소: - 프로세서 (datapath + control) : 명령어를 읽고,해석, 실행하는 부품 - 인풋 (mouse, keyboard..) - 아웃풋 (display,printer..) - 메모리 (disk, drives, DRAM, SRAM, CD) : 현재 실행 되는 명령어와 데이터를 저장하는 부품 컴퓨터 구조란 무엇인가? 컴퓨터 구조는 하드웨어와 소프트웨어를 고려한 컴퓨터의 설계 명령어집합구조 ISA(Instruction Set Architecture) + 기계 조직(컴퓨터의 구성요소의 집합)으로 구성 되어있음 컴퓨터 구조를 알아야하는 이유? 1. 문제해결 능력 소스코드상의 오류를 넘어 컴퓨터 내부의 문제까지 고.. 2022. 11. 8.
스프링 MVC 동작 원리 스프링 MVC 소개 Model 평범한 자바 객체 POJO 도메인 객체 또는 DTO로 화면에 전달하거나 화면으로부터 전달받은 받은 데이터를 담은 객체 View HTML, JSP, 타임리프 데이터를 보여주는역할, 다양한 형태가 가능하다 HTML, JSON, XML,... Controller 스프링 @MVC 사용자 입력을 받아 모델 객체의 데이터를 변경하거나, 모델 객체를 뷰에 전달하는 역할 입력값 검증 입력 데이터를 모델 객체로 변경 변경된 모델 객체를 뷰에 전달 MVC 패턴의 장점 동시다발적인 개발 가능 - 백엔드, 프론트엔드 개발자가 독립적으로 개발 진행가능 높은 결합도 - 논리적으로관련있는 기능을 하나의 컨트롤러로 묶거나, 특정 모델과 관련있는 뷰를 그룹화 가능 낮은 의존도 - 모델, 뷰, 컨트롤러는.. 2022. 8. 1.
Null-safety Null-Safety 스프링 프레임워크 5에 추가된 Null 관련 애노테이션 @NonNull @Nullable @NonNullApi // 패키지 이하의 모든 인자, 리턴타입 모두 NonNull 설정 @NonNullFileds 툴의 지원을 받아 커파일 시점에 최대한 NPE(Null PointerException)을 방지하기 위해 추가 되었습니다. 2022. 8. 1.
스프링 AOP Spring AOP (Aspect-oriented Programming) OOP를 보완하는 수단으로, 흩어진 Aspect를 모듈화 할 수 있는 프로그래밍 기법 흩어진 관심사 (Crosscutting Concerns) Class A { Aspect X, Aspect Y, Aspect Z} Class B { Aspect X, Aspect Y, Aspect Y} Class C { Aspect X, Aspect Z} 각 클래스에서 중복된 관심사를 갖는 경우에 AOP를 적용하면 Aspect X {A,B,C} Aspect Y {A,B} Aspect Z {A,C} 다음과 같이 Aspect들로 모듈화 할 수 있다. AOP 주요개념 Aspect와 Target Advice(해야할 일들) Join point와 Pointcu.. 2022. 8. 1.
SpEL SpEL(Spring Expression Language) 객체 그래프를 조회하고 조작하는 기능을 제공 Unified EL과 비슷하지만, 메소드 호출 지원 및 문자열 템플릿 기능도 제공 OGNL, MVEL, JBOssEL 등 자바에서 사용가능한 여러 EL들이 있지만, SpEL은 모든 스프링 프로젝트 전반 사용하는 EL 스프링 3.0부터 지원 SpEL 구성 ExpresstionParser parser = new SpelExpressionParser() StandardEvalutationContext context = new StandardEvaluationContext(bean) Expression expression = parser.parseExpression("SpEL 표현식") String value.. 2022. 7. 30.
REST API란? API Application Programming Interface 두 어플리케이션 간의 요청과 응답을 사용하여 서로 통신하는 방법을 정의한 인터페이스 REST REpresentational State Transfer 인터넷 상 시스템 간의 상호 운용성을 제공하는 방법 중 하나 시스템 각각이 독립적인 진화를 보장하기 위한 방법 REST 아키텍처 스타일을 따르는 것이 REST API입니다. REST 아키텍처 스타일 Client - Server Stateless Cache Uniform Interface Layered System Code On Demand 이 중에서 Uniform Interface가 잘 지켜지지 않는 경향이 있습니다. Uniform Interface의 제약조건 identification o.. 2022. 7. 27.
데이터 바인딩 추상화 데이터 바인딩이란 ? 기술적인 관점: 프로퍼티 값을 타겟 객체에 설정하는 기능 사용자 관점: 사용자 입력값을 애플리케이션 도메인 모델에 동적으로 변환해 넣어주는 기능 -> 입력 값인 대부분 "문자열"로 가지고 있고, 그 값을 객체의 int, long, Boolean, Date, Event, Book 같은 도메인 타입으로 변환해서 넣어주는 기능 예) 책 구매시 "제목" : "데이터 바인딩", "개수" : "3" 처럼 문자열 입력시 객체는 제목은 String, 개수는 int로 할당 해주는 것입니다. ProPertyEditer 스프링 3.0 이전 까지 DataBinder가 변환 작업 사용하던 인터페이스 Thread Safe하지 않음 -> 상태 정보를 저장하고 있기 때문에 싱글톤 빈으로 등록해서 사용시 문제가 .. 2022. 7. 26.
Validation 추상화 애플리케이션에서 사용하는 객체 검증용 인터페이스 특징 어떤 계층과도 관계가 없다 -> 모든 계층(웹,서비스,데이터)에서 사용가능 DataBinder에 들어가 바인딩 할 때 같이 사용되기도 한다. 인터페이스 boolean supports(Class clazz): 어떤 타입의 객체를 검증할 때 사용할 것인지 결정함 void validate(Object obj, Errors e): 실제 검증 로직을 이 안에서 구현 구현할 때 ValidationUtils 이용시 편리 스프링 부트 2.0.5이상 버전 사용시 LocalValidatorFactoryBean를 빈으로 자동 등록 간단한 검증은 hibernate-validator로 Entity Field에 @Min, @Email, @NotNull등 annotation을 .. 2022. 7. 25.
Resource 추상화 특징 java.net.URL을 추상화 한 갓 스프링 내부에서 많이 사용하는 인터페이스 추상화 한 이유 클래스 패스 기준 리소스 읽어오는 기능 부재 ServletContext를 기준으로 상대 경로로 읽어오는 기능 부재 새로운 핸들러를 등록하여 특별한 URL 접미사를 만들어 사용 가능 하지만 구현 복잡 및 편의성 부족 주요 메소드 상속 받은 인터페이스 getInputStream() exists() isOpen() getDescription() 구현체 UrlResource : 기본 지원 프로토콜 http,https,file.jar등 ClassPathResource : 지원 접두어 classpath FileSystemResource ServletContextResource : 웹 어플리케이션 루트에서 상대 경로.. 2022. 7. 25.
프록시 서버 구현 1-1 1-1 프록시 서버 개요 및 Cache 디렉터리 생성 프록시 서버 개요 프록시 서버란? 인터넷의 캐시 프로그램으로 사용자가 계정을 가진 호스트 컴퓨터에서 최근 자료를 보관하는 저장장소 같은 자료 요구시 프록시 서버내의 cache에 있는 자료 제공으로 더 빠른 처리가능 사용자는 프록시 서버를 통해 자료를 받아오겠다는 사실을 호스트에 알려야 프록시 서버를 통해 자료 받기 가능 최근 자료 이용시 전송 속도가 빠르다는 장점이 있으나, 프록시에 미리 저장되지 않은 자료를 찾는 경우에 프록시 서버를 거쳐 가기 때문에 더 느려 질 수도 있음 프록시 서버 동작 Hit인 경우 프록시 서버 내의 cache에 있는 자료를 제공하여 빠른 전송 Miss인 경우 프록시 서버를 거쳐 Web Server에 자료 요청후 받아와서 전송.. 2022. 7. 25.
mkdir 명령어 구현 예제 linux의 명령어 mkdir을 구현할 것이다. mkdir은 디렉터리를 만드는 명령어이다. mkdir() System call을 이용하여 구현할 것이다. System call 중 mkdir의 헤더는 sys/types.h, sys/stat.h에서 확인할 수 있다. mkdir의 인자로는 경로와 권한이 필요하다. R,W,X는 각각 read, write, execute로 읽기, 쓰기, 실행권한이고, 8진수로도 표기 가능하다. (1은 읽기, 2는 쓰기, 4는 실행권한 ex) 읽기+쓰기, 3, 모든권한 7로 표현 가능하다.) USR(U), GRP(G), OTH(O)는 유저, 그룹, 그 밖으로 나타난다. #include #include #include void main(int argc, char *argv[]) { .. 2022. 7. 19.
시스템 프로그래밍 개요 시스템 프로그래밍이란? 컴퓨터는 크게 하드웨어, 소프트웨어로 나누어 진다. 시스템 프로그램은 하드웨어와 소프트웨어를 연결시켜주는 역할을 한다. 예를 들면 Window, Linux 같은 운영체제들이 시스템 프로그램이다. 시스템 프로그램을 통해 하드웨어를 직접 제어할 수도 있다. 즉, 시스템 프로그래밍을 위해서는 운영체제와 컴퓨터 구조에 대한 지식이 필요하고, 여러 OS위에서 동작하는 응용 소프트웨어를 개발하기 위해서는 시스템 프로그래밍을 알아야한다. 따라서 시스템 프로그래밍은 다른 프로그램보다 근본적인 개념이다. 2022. 7. 19.
IoC 컨테이너와 빈 IoC 컨테이너와 빈이 뭘까? IoC(Inversion of Contol) : 의존관계 주입(Dependency Injection) 이라고도 함. 어떤 객체가 사용하는 의존 객체를 직접 만들어 사용 하는게 아니라, 주입 받아 사용 하는 방법. ApplicationContext를 통해 BeanFactory관리 : 빈 설정 소스로부터 빈 정의를 읽고, 빈 구성 및 제공 애플리케이션 컴포넌트의 저장소 빈: 스프링 IoC 컨테이너가 관리하는 객체. Repository나 Service 어노테이션 이용시 Bean 등록 라이프사이클 인터페이스 사용가능 @PostConstruct를 이용하여 빈 등록시 동작하는 메소드 구현가능 @Service public class BookService { // 의존 객체를 직접 만들어.. 2022. 7. 19.
Optional API Optional 만들기 ● Optional.of() ● Optional.ofNullable() ● Optional.empty() System.out.println(Optional.of(1).isPresent()); System.out.println(Optional.ofNullable(null).isPresent()); System.out.println(Optional.empty().isPresent()); Optional에 값이 있는지 없는지 확인하기 ● isPresent() ● isEmpty() (Java 11부터 제공) List springClasses = new ArrayList(); springClasses.add(new OnlineClass(1, "spring boot", true)); spri.. 2022. 3. 27.
Optional Optional 소개 자바 프로그래밍에서 NullPointerException을 종종 보게 되는 이유 ● null을 리턴하니까! && null 체크를 깜빡했으니까! 메소드에서 작업 중 특별한 상황에서 값을 제대로 리턴할 수 없는 경우 선택할 수 있는 방법 ● 예외를 던진다. (비싸다, 스택트레이스를 찍어두니까.) ● null을 리턴한다. (비용 문제가 없지만 그 코드를 사용하는 클리어인트 코드가 주의해야 한다.) ● (자바 8부터) Optional을 리턴한다. (클라이언트에 코드에게 "명시적"으로 빈 값일 수도 있다는 걸 알려주고, 빈 값인 경우에 대한 처리를 강제한다.) Optional ● 오직 값 한 개가 들어있을 수도 없을 수도 있는 컨테이너. 주의할 것 ● 리턴값으로만 쓰기를 권장한다. (메소드 .. 2022. 3. 27.
Stream API 사용할 Online Class의 spring, java, holyEvents 리스트 목록 List springClasses = new ArrayList(); springClasses.add(new OnlineClass(1, "spring boot", true)); springClasses.add(new OnlineClass(2, "spring data jpa", true)); springClasses.add(new OnlineClass(3, "spring mvc", false)); springClasses.add(new OnlineClass(4, "spring core", false)); springClasses.add(new OnlineClass(5, "rest api development", fals.. 2022. 3. 26.
Stream Stream ● sequence of elements supporting sequential and parallel aggregate operations ● 데이터를 담고 있는 저장소 (컬렉션)이 아니다. ● Funtional in nature, 스트림이 처리하는 데이터 소스를 변경하지 않는다. ● 스트림으로 처리하는 데이터는 오직 한번만 처리한다. ● 무제한일 수도 있다. (Short Circuit 메소드를 사용해서 제한할 수 있다.) ● 중개 오퍼레이션은 근본적으로 lazy 하다. ● 손쉽게 병렬 처리할 수 있다. names.add("holy"); names.add("moly"); names.add("god"); names.add("jesus"); // Stream 연속된 데이터를 처리하는 Opera.. 2022. 3. 26.
자바 8 API의 기본 메소드와 스태틱 메소드 Iterable의 기본 메소드 ● forEach() ● spliterator() List name = new ArrayList(); name.add("holy"); name.add("moly"); name.add("god"); name.add("jesus"); // 람다 표현식 name.forEach(s -> { System.out.println(s); }); // 메소드 참조 name.forEach(System.out::println); // splitrator로 만들어서 Spliterator spliterator = name.spliterator(); // trySplit을 이용하여 두개로 나누어줌 Spliterator spliterator1 = spliterator.trySplit(); while .. 2022. 3. 26.
메소드 레퍼런스 Greeting 클래스 public class Greeting { private String name; public String getName() { return name; } public Greeting(){ } public Greeting(String name){ this.name = name; } public String hello(String name){ return "hello " + name; } public static String hi(String name){ return "hi " + name; } } static 메서드 참조하는 경우 :: 이용 public class Java8to11Application { public static void main(String[] args) { // .. 2022. 3. 26.