개발 46

[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

[git 입문 3]- git commit 메세지 작성하기, 수정하기, git log, git ignore

이번 시간에는 https://ebang.tistory.com/31 grocery)라고 적혀잇는데 이건 다다음시간에 알아본다. ebang 이라는 사람은 2022년 마지막 날까지 열심히 커밋을 했구나 , 라는 걸 알 수 있다. 그런데 이 git log 명령어는 commit 메세지를 모두 보여준다. 지금까지는 한 줄 짜리 짧은 메세지였지만, 너무 긴 메세지라면 한줄만 보면서 여러 histoy를 보는 것이 훨씬 간편할 지도 모른다. 그래서 이런 명령어를 사용한다. [git log 메세지 간단하게 출력하기] git log --oneline git log --pretty=online--abbrev-commit --abbrev-commit 옵션은 hash값이 짧게 보이는 것이고, --pretty=online 옵션은..

개발/.git 2023.01.01

[ git 입문 1 ]- 깃이란? (깃 개념, 터미널, 터미널에서 커밋하기)

1. git - version control system이다. (버전관리 시스템) - 당신이 어떤 글을 쓰고 있는데 에세이_최종.docs 에세이_찐_최종.docs 에세이_진짜_찐_최종.docs 라고 고쳐가며 글을 계속 수정해나간다고 치자. 일반 사람들은 보통 이렇게 글을 고쳐 나가면서 가장 마지막으로 수정한 제출본만을 사용한다. 하지만 수정 전의 파일이 저렇게 많아지다보면 어떤 걸 수정했었는지도 기억이 안나고, 관리하기가 매우 복잡해진다. 이런 것들을 해결할 수 있는 것이 '버전 관리 시스템'이다. 이런 것 중 하나로, 가장 많은 사람들이 사용하는 버전 관리 시스템이 git이다. 그리고 그 사용량은 전세계적으로 매우 압도적이기 때문에, git을 사용한다고 보면 된다. 깃을 이용하면 매 순간 저장할 때마다..

개발/.git 2022.12.31
728x90
728x90