위키

박유진·2023년 11월 6일
0

23-12-18

✴︎ 팀플

  • @builder : 자기 자신만 쓸 수 있음
  • @SuperBuilder : 상속관계에서 부모까지 빌더 패턴으로 쓸 수 있다.
  • @ToString : 객체를 문자열로 볼때 객체그대로 볼 수있다.

23-12-15

✴︎ 팀플

  • git stash : 내가 한 작업물 임시저장
  • git stash pop : stash처리한 작업물중에 최근 작업물 불러오기
  • @MappedSuperclass : 객체의 입장에서 공통 매핑 정보가 필요할 때 사용
    공통 매핑 정보가 필요할 때, 부모 클래스에 선언하고 속성만 상속 받아서 사용하고 싶을 때 @MappedSuperclass를 사용한다.

23-12-07

✴︎ 알고리즘

  • reverse() : 저장되어 있는 문자열의 순서를 거꾸로 나열하는 메서드
    -> StringBuilder, StringBuffer 클래스로 정의 해주고 사용 가능
  • to String(): StringBuffer 인스턴스의 문자열을 String으로 반환한다.
  • .append() : StringBuffer 인스턴스가 저장하고 있는 문자열 뒤에 덧붙인다
  • Integer parseInt(String 값): String타입의 숫자를 int타입으로 바꿔줌

23-12-05

✴︎ 점프 투 스프링부트

  • form : action 생략되어있으면 GET요청이다.
  • param : 스프링부트에서 제공해주는 기본 객체

23-12-04

✴︎ 프론트엔드

  • white-space:nowrap : 줄바꿈X => 글자들이 한줄로 나옴
  • overflow-x:visible : 가로방향으로 넘치는 부분을 그대로 보여줌(기본값)
    -> hidden, scroll, auto 적용가능
  • text-overflow:ellipsis : 넘쳐서 숨겨진 텍스트를 ... 로 처리함

23-12-01

✴︎ 점프 투 스프링부트

  • @Bean : 내장되어있는 것을 사용
  • @Component :
  • Specification : 검색한 결과 리스트를 넘겨줌
  • 히든폼 쓰는 이유 ? :

23-11-30

✴︎ 점프 투 스프링부트

  • Set : 중복을 허용하지 않는 자료형

23-11-29

✴︎ 점프 투 스프링부트

  • enum : YES or NO / 권한 체크
  • implements : 인터페이스 상속
  • 쿠키 : 사용자의 중요한 정보를 쿠키에 넣어서 관리함 브라우저 내부에서 관리 세션보다 덜 민감하다
  • 세션 : 사용자 식별 정보 민감해서 숨겨놓는다.(로그인했는지 )
  • 캐시 : 브라우저 자원 재활용(새로고침했을때 레이아웃, 정적인 요소는 미리 받아놓고 기록해둠)

23-11-28

✴︎ 점프 투 스프링부트

  • paging.getTotalElements : 전체 게시물 개수
  • paging.number : 현재 페이지 번호
  • paging.size : 페이지당 게시물 개수
  • loop.index : 나열 인덱스(0부터 시작)
  • a 링크는 기본적으로 GET 요청이다.
  • 게시물 번호 공식 :
    번호 = 전체 게시물 개수 - (현재 페이지 * 페이지당 게시물 개수) - 나열 인덱스
  • bindingResult.rejectValue(필드명, 오류코드, 에러메시지)

23-11-27

✴︎ 점프 투 스프링부트

  • @Configuration : 설정파일을 만들기 위한 어노테이션 or Bean을 등록하기 위한 어노테이션
  • @EnableWebSecurity : 모든 요청 URL이 스프링 시큐리티의 제어를 받도록 만드는 어노테이션
  • /** : 전체를 의미한다.
  • BCryptPasswordEncoder : 비밀번호를 암호화시켜줌
  • 비밀번호는 복호화 안되는 암호여야한다.
    복호화 : 부호화 된 정보를 부호화 전으로 그 전으로 돌리는 것
  • @override : 부모로부터 받아와서 재정의
  • isAnonymous() : 익명인지 검증
  • isAuthenticated() : 인증이 됐음

    sec:authorize="isAnonymous()"
    : 로그인 되지 않은 경우에만 해당 엘리먼트가 표시되게 한다.
    sec:authorize="isAuthenticated()"
    : 로그인 된 경우에만 해당 엘리먼트가 표시되게 한다.

  • .invalidateHttpSession(true)) : 로그인하고 있는 것을 기억하는것
  • principal : 전역적으로 현재 로그인한 유저 아이디를 가져와준다. ?
  • @PreAuthorize : 사전 권한 인증
  • @PreAuthorize("isAuthenticated()") : 로그인 페이지로 이동한다.

23-11-21

✴︎ 점프 투 스프링부트

  • 의존성 주입 : 해당 객체가 실행될때 무조건 있어야해서 사용 하는것
    -> @RequiredArgsConstructor, @Autowired, @Setter

23-11-21

✴︎ 점프 투 스프링부트

  • @Valid : 검증
  • required : 필수값
  • placeholder : 반 투명글씨로 설명 적을 수 있음
  • autocomplete = "off" : 자동 완성 끄기
    => 검색 할때 검색 했던 기록 안 뜨게 한다
  • MYSQL 필드별 한글 저장 가능 개수
    -> varchar(200) : 200자
    -> text : 21,845자
    <html layout:decorate="~{layout}">
    <div layout:fragment="content" class="container my-3">
    -> 템플릿 홈에 { layout }으로 꾸미겠다(decorate)는 뜻
    -> 그 layout 안에 content라는 이름으로 집어넣겠다는 뜻(fragment)
  • return "redirect:/question/list"; : 질문 저장후 질문목록으로 이동
    -alert alert - danger: (부트스트랩 클래스) 부트스트랩 경고창
  • BindingResult : @Valid 애너테이션으로 인해 검증이 수행된 결과를 의미하는 객체이다.

23-11-20

✴︎ 점프 투 스프링부트

  • #lists.size : 갯수를 가져옴
  • ${ } : 데이터 영역
  • 정적 자원(HTML, CSS) :
  • 동적 자원(JS) : 처리하면 결과가 바뀌는것
  • cdn : 웹상의 정보를 가져오는것

23-11-17

✴︎ 점프 투 스프링부트

  • @RequiredArgsConstructor : 생성자 함수를 알아서 만들어준다.
    @AllArgsConstructor 보다 효율적이다.
    (@RequiredArgsConstructor는 필요한것만 넣어준다)
  • redirect:<URL> : URL로 리다이렉트한다는 뜻
    <<타임리프 주소 양식 >>
    th:href = "@{ | 주소 | }" => 렌더링 => href = "주소"
    @{ | 주소${ } | } - > 바뀔 수있는 변수는 ${ } 넣어준다.
  • @PathVariable ("변수명") : 경로 변수
  • is presnt( ) : 존재하는지 여부 따질때 사용
  • super( ) : 부모 생성자 함수 호출
  • @ResponseStatus : 에러 터졌을때 status에 대한 상태를 정해주는것
  • @RequestMapping("/question") : 모두 /question으로 시작하는 경우에 /question 를 생략한 그 뒷 부분만 적거나 안 써도 괜찮다.
  • <form action=""></form> : 데이터를 담는 태그
  • < textarea></textarea> : 긴 내용을 쓸때 사용
  • method = "post" : GET이랑 다르게 바디에 노출되지 않고 전송된다.

23-11-16

✴︎ 점프 투 스프링부트

  • @DisplayName( ) : 무슨 테스트인지 알려주는 어노테이션
  • Optional : 값이 있을 수도 있고 없을 수도 있다고 알려줌
    null 값이 허용 되는 형태로 가져온다.
  • @Transactional : DB 연결이 끊어지지 않는다.

✴︎ 프론트엔드

  • &nbsp : 띄어쓰기
  • text-decoration : 글자 언더라인 빼줌 ( text-decoration : none; )

23-11-15

✴︎ 스프링부트

- 16강 사람 수정 기능 구현

<1>
    @GetMapping("/home/modifyPerson")
    @ResponseBody
    public String modifyPerson(int id, int age, String name) {
       Person p = null;
        for (int i = 0; i < people.size(); i++) {
        // Person person = people.get(i); => get(i)
       // get(i)는 people이 갖고있는것들을 표시한것(id, age, name)
           if (people.get(i).getId() == id) {
               p = people.get(i);
            }
         }

       p.setName(name);
       p.setAge(age);
       return "";
    }
}
       
 <2>
    @GetMapping("/home/modifyPerson")
    @ResponseBody
    public String modifyPerson(int id, int age, String name) {
     Person foundPerson = people
                .stream()
                .filter(p -> p.getId() == id)
                // .filter() : 어떤 특정 조건에 부합되는것만 남겨놓음
                .findFirst() //첫번째 값 반환 (메서드 이름 유추)
                .orElse(null); // 특정 조건이 아닌 경우엔 null이다는 뜻
                
        if (foundPerson == null) {
            return id + "번 사람이 존재하지 않습니다.";
        }
        foundPerson.setAge(age);
        foundPerson.setName(name);

        return id + "번 사람이 수정되었습니다.";
    }
}

✴︎ 점프 투 스프링부트

  • 엔티티(객체)
    • 1 : 1
    • 1 : N
      ex) 회원과 그 회원의 작성글들
      게시물과 그 게시물의 댓글들
    • M : N
  • int integer 차이
    integer(int의 Wrapper Class) : 참조형이라 null값을 허용해줌
    int : 자료형, 변수의 타입으로 null 값 허용X

✴︎ 프론트엔드

  • <br> : 줄바꿈 엘리먼트
  • target = "" : 새 창으로 이동
  • <a></a> : 링크 버튼
    ex) < a target ="_blanck" href="주소">< /a>
  • inline 태그 5가지 : a, span, img, ::before, ::after

✴︎ 알고리즘

  • [ ]이 없으면 배열이 아니다.
  • split( ) : 문자열을 하나씩 나누어준다. (string)
  • replace( ) : 내가 바꾸고싶은 문자로 치환시켜준다.
  • replaceAll( ) : 내가 바꾸고싶은 문자 전부를 치환시켜준다.
  • char타입 사용할땐 ' '
  • string 타입 사용할땐 " "

23-11-14

✴︎ 스프링부트

- 15강 사람 삭제 기능 구현

<1>
 public String removePerson(int id) {
        Person p;
        for (int i = 0; i < people.size(); i++) {
            p = people.get(i);
            people.remove(p);
        }
        return "%d번 사람이 삭제되었습니다.".formatted(p.getId());
<2>
    @GetMapping("/home/removePerson")
    @ResponseBody
    public String removePerson(int id) {
        boolean removed = people.removeIf(person -> person.getId() == id);
// removeIf : 리스트 객체에서 자동으로 적용해주는 메서드
// Person으로 순회 -> 그 중 하나(getId())가 내가 받아온 id랑 값이 같다면 삭제 / 삭제하면 TRUE or FALSE로 리턴
        if (removed == false) {
            return id + "번 사람이 존재하지 않습니다.";
        }
        return id + "번 사람이 삭제되었습니다.";
    }

✴︎ 점프 투 스프링부트

  • H2 데이터베이스 : 관계형 | 가볍게 개발할때 사용
  • @ID : 고유키지정(PK)

✴︎ 프론트엔드

  • block
    너비 : 너비 지정되어 있지 않으면 최대한 늘어난다.
    높이 : 높이 지정되어 있지 않으면 최소한으로 줄어든다.
    배열방향 : 세로로 한줄에 무조건 1개씩 나온다.
  • inline block
    너비 : 너비가 지정되어 있지 않으면 최소한으로 줄어든다.
    높이 : 높이가 지정되어 있지 않으면 최소한으로 줄어든다.
    배열방향 : 가로로 한줄에 최대한 많이 나온다.
  • 폰트
    letter-spacing : 자간 조절

✴︎ 알고리즘

  • toUpperCase() : 소문자 -> 대문자
  • toLowerCase() : 대문자 -> 소문자
  • charAt() : 저장된 문자열 중에서 한 글자만 선택해서 받아줌
  • Arrays.sort() : 오름차순 정렬

23-11-13

✴︎ 스프링부트

  • 컨트롤러의 의미
    고객(브라우저)의 요청을 수집하고, 관련부서로 토스해 주는 역할을 합니다.
    관련부서에서 해당일을 처리하여 컨트롤러에서 다시 알려주면, 컨트롤러는 그 내용을 다시 고객(브라우저)가 이해할 수 있는 형태로 바꿔서 최종적으로 고객에게 응답합니다.
    은행으로 비유하면, 창구에 앉아서 고객과 직접적으로 소통하는 창구직원에 비유할 수 있습니다.
  • 라이브러리 vs 프레임워크
    라이브러리 : 자유도 - 상, 속도 - 하
    -> 경우의 수가 많고 내가 선택해서 나가야한다.(보수적)
    프레임워크 : 자유도 - 하, 속도 - 상
    -> 정해진 규칙을 빠르게 습득한다.(개발 습득력이 빠름) 코어적인 면은 내가 공부하기에 따라 더 성장할 수 있다.
  • @GetMapping("/home/main/")
    : 개발자가 스프링부트에게 말한다.
    만약에 /home/main/이런 요청이 오면 아래 메서드를 실행해줘
  • @ResponseBody : 사용자에게 문자열로 보이게 함
  • header에는 어떻게 처리해야할지에대한 데이터(식별 값)가 있고 body에는 상세데이터가 있다.
  • 쿼리스트링(파라미터 값) : URL에서 물음표 다음에 오는 것들이 쿼리 스트링이다.(옵션값)
  • @RequestParam
    : 개발자가 스프링부트에게 말한다.
    int a는 쿼리스트링에서 a 파라미터의 값을 얻은 후 정수화 한 값이어야 한다.
    @RequeseParam은 생략 가능
  • final
    : 최초의 딱 한 번만 세팅한다는 뜻.. 만들때 세팅해둔 값을 건드릴수 없다.
  • @GeneratedValue : 자동 증감

- 13강 사람 추가 기능 구현

    @GetMapping("/home/addPerson")
    @ResponseBody
    public String addPerson(String name, int age) {
        Person p = new Person(name, age);


-> 인스턴스 변수로 선언한 모습...

//        List<Person> people = ArrayList<>(); //이렇게 쓰면 호출할때마다 계속 새로운 값 넣어주니까 배열이 한 개 밖에 없다.
//        people.add(p);  그래서 전역적으로 쓸 수 있게 인스턴스 변수로 선언해야함(맨 위에)

        System.out.println(p);
        people.add(p);
        return p.getId() + "번 사람이 추가되었습니다.";
//   참고 return "%d번 사람이 추가되었습니다.".formatted(p.getId()); 변수 치환된 값이 %d에 자동으로 들어감
    }
    
    @GetMapping("/home/People")
    @ResponseBody
    public List<Person> showPeople() {
       return people;
    }
    
    @Getter
    @AllArgsConstructor
    @Tostring // 본래의 데이터 상태를 보여줌
    class Person {
        //    static = 본사 데이터 -> 지점 데이터들한테 공유 가능 ...
        private static int lastId;
        private final int id;
        private final String name;
        private final int age;

        //밑처럼 static을 써주면 person 객체가 생성될때 초기화 된다.
        static {
            lastId = 0;
        }

        Person(String name, int age) {
//        this.id = lastId++;
//        this.name = name;
//        this.age = age;
//        this.~ : 속성에 접근함  this() : 생성자 함수에 접근함
            this(lastId++, name, age);
        }
    }

✴︎ 프론트엔드

  • HTML : 내용
  • CSS : 꾸밈
  • JS: 효과

23-11-09

✴︎ GIHUB FLOW 복습

  • git log --oneline --graph --all : 전체 로그 조회
  • git fetch prune : 맨 마지막에 원격 정리
  • git push origin (브랜치명)-f : 리베이스 충돌났을때 푸쉬
  • git -rm --cached (삭제할파일): 원격 저장소 파일만 삭제
  • git branch -D : 로컬 브랜치 삭제

✴︎ 알고리즘

  • contains() : 대상 문자열에 특정 문자열이 포함되어 있는지 확인하는 함수
  • starswith() : 특정 문자 또는 문자열로 시작하는지 체크하는 함수
  • endswith() : 대상 문자열이 특정 문자 또는 문자열로 끝나는지 체크

23-11-08

✴︎ 팀플

  • 쿠폰 MVC패턴으로 나누기, 디비 연결

23-11-07

✴︎ GITHUB FLOW

  • git clone 깃헙주소
    git checkout -b (파일명)
    git add .; git commit -m "작업내용"
    git pull origin main --rebase
    git push origin -f
    깃허브 접속, pr 생성하라는 버튼 확인

✴︎ 팀플

  • 쿠폰 디비 오류 -> 해결

23-11-06

✴︎ 팀플

✴︎ git flow

  • 협업 방법론이다.
  • 안정적이지만 복잡하고 오래걸린다.

✴︎ github flow

  • 간단하고 빠르게 적용가능
  • 안정성도 자동화로 가능

0개의 댓글

관련 채용 정보