반응형

개발 28

[Spring 기본] 3. Spring 프레임워크 사용하기

1. 스프링 컨테이너 ApplicationContext = 스프링 컨테이너 @Configuration annotation이 붙은 AppConfig 를 구성정보로 사용한다. AppConfig 에서 @Bean 어노테이션이 뭍은 메소드를 모두 호출해서 반환된 객체를 스프링 컨테이너에 등록한다B. 이렇게 스프링 컨테이너에 등록된 객체를 스프링 빈이라고 한다. 따라서 AppConfig 에서 객체를 찾아오는 대신, 스프링 컨테이너에서 필요한 스프링 빈(객체)를 찾아야 한다. AppConfig에서 MemberService 의 구현체를 반환하는 메소드 applicationContext.getBean(, 반환받을 클래스 타입) 함수로 스프링을 받아온다. 2. 스프링 컨테이너 생성 스프링 컨테이너가 생성되는 과정 Appl..

개발/java 2023.12.21

Input 찬찬히 뜯어보기. (BufferedReader와 InputStreamReader?)

Java 에서 Input을 받기 위한 방법 1. BufferedReader Class 서론 저는 C, C++ 로 코드를 많이 짭니다. C, C++은 몇 단계만 거치면 바로 시스템 콜로 read, write 호출하는게 보여서 어떻게 동작하는지 아는게 쉬웠는데 java 는 왜 버퍼를 만들까… 하는 답답함이 있었습니다. 그래서 시간을 내어 원리를 파악하는 시간을 가졌습니다. 1. BufferedReader Class BufferedReader class 는 문자들의 연속을 입력받을 때 사용하는 간단한 클래스입니다. 코딩 테스트에서 속도를 빠르게 한다고 하여 많이 사용하는 클래스입니다. 보통 이런식으로 사용됩니다. BufferedReader 클래스는 안에 InputStreamReader를 반드시 사용해야할까요?..

개발/java 2023.12.11

[Spring 기본] 2. 실제 코드에서의 스프링 프레임워크 핵심 원리

1. 그냥 java 코드를 사용할 때 객체 지향의 원리에 맞게, 역할과 구현을 나누어 분리해봅시다. 회원 가입을 위한 요구사항을 만족하는 프로그램을 먼저 작성해봅시다! 회원 도메인 도메인 간 협력관계 : 기획자와 개발자가 모두 합의하에 참고하는 문서입니다. 클래스 설계 : 개발자가 전체적인 클래스를 설계합니다. public interface MemberService { void join(Member meber); Member findById(int id); } public class MemberServiceImpl implements MemberService { private MemberRepository memberRepository = new MemoryMemberRepository(); //실제 구..

개발/java 2023.12.08

[Spring 기본] 1. 객체 지향 설계와 스프링

어떻게 스프링이 등장하게 되었는지 짤막하게 정리한 글입니다. 실제로 '봄'이라는 뜻에서 spring 이라는 이름을 갖게 되었다는 것이 인상깊었습니다. EJB 지옥 - 예전 개발자들에게 있어 사용하던 EJB는 이론은 좋았으나 구현은 너무 힘들었다고 합니다. 그래서 자바로 돌아가자는 움직임이 생겼습니다. EJB에서 Entity Bean - ORM 기술을 사용중이었는데요, 너무 힘들어하던 개발자 2명이 각각 오픈소스를 개발했습니다. Hibernate : EJB 엔티티빈 기술을 대체. JPA 새로운 표준 정의 Spring framework : EJB 컨테이너 대체, 단순함. 사실상 표준 기술 그 후 EJB에서는 Hibernate 를 만든 개발자 데려와서 JPA를 만들었습니다. JPA: 표준 인터페이스를 만들고,..

개발/java 2023.12.08

javascript의 .map 파일

.map 파일은 본론부터 말하자면 개발자가 디버깅하기 편하게 원본파일 - 특정 코드와의 매핑 파일로써 존재하는 파일이다. 특정 코드는 TypeScript 일수도, UglifyJS, minifyJS일수도 있다. (*UglifyJS: 난독화된 자바스크립트, minifyJS: 압축된 자바스크립트) 임베디드에서도 map 파일은 전역변수,함수의 주소를 기록해놓은 파일로써 존재한다. javascript도 그런 개념으로 map 파일을 가지고 있다. javascript는 에러가 발생했을 때 특정 행, 칼럼에 대한 정보를 주지 않는다. 따라서 원본과의 매핑파일인 source map 을 이용해서 디버깅하면 편한 것이다. 더 정확하게 설명한 source map은 압축된 코드와 압축된 코드를 Base64 기반으로 매핑한 데이..

개발/javascript 2023.11.19

JUnit

#개발 #java #테스트코드 정의: Java 생태계에서 제공하는 단위 테스트 프레임워크 (추가적으로 보고 싶은: - [Using Gradle in the Eclipse IDE](https://www.vogella.com/tutorials/EclipseGradle/article.html)) Junit Junit 테스트는, 테스트 목적으로 만들어진 클래스 내에서 @Test 어노테이션이 붙은 메소드이다. 기대값과 실제 값을 비교하는 assert 구문을 이용하여 테스트를 할 수 있다. 특히 실패했을 경우 @DisplayName 어노테이션을 통해, 출력하는 메시지를 정하여 보다 수월하게 확인할 수 있다. 예시 코드 package com.vogella.junit5; import static org.junit.ju..

개발/java 2023.11.03

자바스크립트의 작동 원리(V8 Engine)

#개발 #javascript 번역 (사이트1 사이트2) JavaScript는 Google의 V8엔진을 사용한다. 또한 싱글 스레드임과 동시에 콜백큐를 사용한다.이에 대해 자세히 알아보자. The Javascript Engine - Javascript engine은 프로그램 혹은 인터프리터로, 자바스크립트 코드를 실행하는 역할을 한다. 자바스크립트 엔진은 표준 인터프리터로 구현될 수도 있고, 혹은 자바스크립트를 단순히 bytecode로 컴파일 하는 컴파일러일 수도 있다. 자바스크립트 엔진을 구현하는 유명한 프로젝트에는 다음과 같은 것들이 있다. V8 : 오픈소스 , 구글이 만들었고 c++로 구현되어있다. Rhino : 오픈소스, Mozilla 기업이 만들었다. Java로 구현되어있다. SpiderMonke..

개발/javascript 2023.11.02

git 에 실수로 올렸던 .env 파일 내리기

발단은 이렇다. docker compose file 을 작성하던 도중 .env 파일을 .gitignore 에 포함시키지 않고 업로드 하는 실수를 했다. 바로 github 페이지에서 삭제하고, master branch 로 commit 했다. 그 후에 .gitignore 파일에 .env, */*.env를 작성해서 push를 했음에도 불구하고 자꾸만 .env 파일이 github에 노출되는 것이었다! 그래서 이유를 찾아보았는데, 그 이유는 이미 파일이 git history에 저장되어있기 때문이었다. 그래서 해결방법은 다음과 같다. git rm .env --cached cached에서 파일을 삭제하는 것이다. 참고한 stackoverflow 사이트는 다음과 같다. https://stackoverflow.com/q..

개발/.git 2023.07.06

[C++] iterator에 대하여 (반복자)

🟡 반복자의 정의 반복자 : 컨테이너의 한 지점을 가리키는 객체. 컨테이너의 종류와 내부 구조에 상관없이 한 요소를 가리키는 목적으로 반복자라는 동일한 장치를 일관된 방법으로 사용할 수 있다. 컨테이너에 대해 알고리즘을 적용하는 등 저장된 요소에 접근해야할 때는 반복자가 필요하다. 즉 반복자가 알고리즘과 컨테이너의 연결 매개체로 존재한다. 그리고 반복자를 통해서 여러 종류의 컨테이너를 동일한 알고리즘을 적용해서 사용할 수 있다. 그에 대한 예시로 STL 알고리즘에서는 container 정보가 아니라 iterator 정보만을 전달해서 사용하도록 하고 있다. 🟡 STL 알고리즘과 컨테이너를 잇는 '반복자' stl 알고리즘이 받는 반복자는 단일 요소보다는, 반복자 구간을 받아들여서 구간 내의 모든 요소에 대해..

개발/C,C++ 2023.06.12
728x90
728x90