우리 프로젝트의 git 워크플로우.

먼저  https://github.com/gracelove91  에 들어가서 본인이 소속된 팀의 프로젝트를 자신의 계정으로 fork 해옵니다.

GitHub Desktop을 열고 Clone a Repository from the internet을 선택합니다.

아까 fork해온 프로젝트를 선택하고, 적절한 위치를 지정해준 뒤 Clone 버튼을 누르면지정한 위치에 새로운 Local Repository가 만들어집니다. 이제 기본셋팅은 완료됐습니다. 코딩만 하면 되는데, 일단 코딩하기 전 개발할 기능의 Branch를 따봅시다.

current branch를 클릭한 뒤 new branch를 클릭합니다.

branch의 이름을 지어준 뒤 Create Branch를 클릭합니다

그럼 Current Branch가 방금 만들어준 Branch로 바뀌어있는 걸 알 수 있습니다.

또한 STS 프로젝트 옆에도 현재 브랜치가 명시되어있는 걸 알 수 있습니다. 이제 IDE에서 작업을 합니다.

Git 개요에서 말씀드렸던 것처럼 Git이 해당 프로젝트 내의 변경사항들을 추적합니다. 이제 Commit을 합니다. 의미있는 커밋메시지를 적어야합니다.

커밋을 한 상태입니다. feat/userValidator 브랜치에는 해당 커밋이 기록이 된 겁니다. 이제 Local Repository에서 Origin Repository로 브랜치를 올립니다.(publish branch)

publish branch를 한 뒤, 깃헙에 가보면 해당 브랜치가 Origin Repository에도 생긴 걸 볼 수 있습니다.

이제 PullRequest를 보내봅시다. create pull request를 클릭하면 깃헙 홈페이지로 연결됩니다.

Origin의 feat브랜치에서 Upstream의 develop 브랜치로 pull request를 생성합니다. 팀원 분들은 직접 Merge하지 마시고, 팀장이 코드를 확인하고 Merge를 합니다.

추가.

우리는 모두 협업 중인 상태입니다. 따라서 내가 기능을 작업하고 있을 때, 작업의 베이스가 되는 코드가 최신 상태가 아닐 수도 있음을 알아야합니다.

상황 예)

  1. 로컬저장소에서 feat/login 브랜치를 만든 뒤 로그인 기능을 구현중이다.
  2. 다른 팀원이 회원가입기능을 완성시켜서 upstream/develop 에 create pull request를 하고, 팀장이 최종적으로 merge했다.

이 상황이라면 지금 개발하고 있는 로그인기능은 회원가입기능이 없는 코드 위에서 작업하고 있는 것입니다. 따라서 내 로컬 저장소를 최신화할 필요가 있습니다.


Fetch origin을 누릅니다.


Choose a branch to mergo into :브랜치명 을 클릭합니다


그럼 current branch와 merge할 브랜치를 선택할 수 있습니다. upstream/develop 을 선택한 뒤 merge합니다.

pull request를 보내기 전에 꼭 꼭!! 코드를 최신화한 후에 보내는 걸 권장드립니다.

'JAVA > SPRING PROJECT' 카테고리의 다른 글

Git과 Git Desktop 개요  (0) 2019.11.15
SPRING VALIDATOR  (0) 2019.11.13
java config으로 하는 Spring 셋팅.  (0) 2019.11.08
[Git] 깃 전략.  (0) 2019.11.08
Github에 올라와 있는 프로젝트 가져오기.  (0) 2019.11.08

Git과 Github Desktop 설치

어제 강의실에서 보여드렸던 것처럼 코드없이 텍스트파일로 Git의 어드밴티지를 누릴 수 있는 방법을 알아봅니다.
먼저 Git홈페이지로 들어가서 Git을 다운로드 받습니다.

다음 링크로 가서 Git Desktop을 다운로드 받습니다. GitHub Desktop | Simple collaboration from your desktop

그 후에 Console에 가서 git --version을 쳐봅니다.

git의 version 정보가 뜨면 제대로 설치 된 겁니다.

Git과 Github의 차이

git은 파일들을 트래킹하는 방식입니다. GitHub은 git파일들을 업로드하는 곳입니다.

일단 git프로젝트가되면, git은 모든 파일들을 감시합니다. 뭐가 바뀌었고, 언제 바뀌었고, 누가 바꿨고를 git은 알고있습니다. 덕분에 git은 history를 가지고있으며, 만약 누가 어떤 파일을 수정해서 웹사이트가 먹통이 됐다면, 그 사람을 찾아가 줘팬다음, 웹사이트가 잘 동작했던 때로 되돌릴 수 있습니다.

GitHub은 cloud git provider 중 하나입니다. GitHub외에 GitLab, bitbucket 등등이 있습니다.

Github Desktop

Git은 기본적으로 Command Line Interface로 동작합니다. 다음과 같이 수많은 명령어를 Console에 입력해야된다는 뜻이죠.

하지만 사람들은 Console에 친숙하지않습니다. 따라서 GitHub은 Git에 대한 접근이 용이할 수 있게, GitHub Desktop이라는 Graphic User Interface를 만듭니다.
이 많은 명령어들을 클릭만 하면 될 수 있게 만들어 놓았습니다.

'JAVA > SPRING PROJECT' 카테고리의 다른 글

Git 워크플로우  (0) 2019.11.15
SPRING VALIDATOR  (0) 2019.11.13
java config으로 하는 Spring 셋팅.  (0) 2019.11.08
[Git] 깃 전략.  (0) 2019.11.08
Github에 올라와 있는 프로젝트 가져오기.  (0) 2019.11.08

pom.xml

pom.xml 에 다음과 같은 의존성을 추가합니다.

        <!--validator -->
        <!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator -->
        <dependency>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>6.1.0.Final</version>
        </dependency>
        <dependency>
            <groupId>javax.el</groupId>
            <artifactId>javax.el-api</artifactId>
            <version>3.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish</groupId>
            <artifactId>javax.el</artifactId>
            <version>3.0.0</version>
        </dependency>

ServletConfig.java

ServletConfig.java 에 다음과 같이 추가합니다

    @Bean
    public Validator validator() {
        return new LocalValidatorFactoryBean();
    }

    @Override
    public Validator getValidator() {
        return validator();
    }

다음으로는 유효성을 검사할 객체의 클래스에 제약조건을 명시해줍니다.
간단하게 이벤트의 이름, 이벤트의 정원, 이메일을 iv로 갖는 Event 클래스를 만듭니다.

Event.java

@Getter @Setter
public class Event {
    @Min(value = 3, message = "최소 3글자 이상이어야합니다.")
    private String title;
    @Min(value = 2, message = "최소 2명 이상이어야합니다.")
    private Integer limit;
    @Email(message = "이메일의 형식이어야합니다.")
    private String email;
}

form.jsp

다음으로 jsp를 작성합니다. 바인딩에러를 쉽게 보여주기 위해 스프링폼을 이용합니다 (<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>)

<section class="container">
    <div class="row">
        <form:form modelAttribute="member" method="post" action="/loginProcess">
            아이디 : <form:input path="username"/>
            <form:errors path="username"/>
            비밀번호 : <form:input path="password"/>
            <form:errors path="password"/>
            이메일 : <form:input path="email"/>
            <form:errors path="email"/>
            <button type="submit">로그인</button>
        </form:form>
    </div>
</section>

바인딩에러가 있으면 message는 <form:errors ... /> 와 매핑되서 보여집니다.

EventController.java

@Controller
@Slf4j
public class EventController {

    @GetMapping("/event/form")
    public String eventForm(@ModelAttribute Event event) {
        return "/event/form";
    }

    @PostMapping("/event/form")
    public String eventProcess(@Validated @ModelAttribute Event event, BindingResult bindingResult) {
        if(bindingResult.hasErrors()) {
            return "/event/form";
        }
        return "redirect:/index";
    }
}

post로 요청을 받으면 @Validated 로 Event 객체를 검사합니다. 검사한 뒤 바인딩에러가 있으면 bingdingResult에 에러를 담아줍니다. 만약 에러가 있으면 다시 form.jsp를 보여주고, 에러가 없으면 index페이지로 리다이렉트해줍니다.

화면

'JAVA > SPRING PROJECT' 카테고리의 다른 글

Git 워크플로우  (0) 2019.11.15
Git과 Git Desktop 개요  (0) 2019.11.15
java config으로 하는 Spring 셋팅.  (0) 2019.11.08
[Git] 깃 전략.  (0) 2019.11.08
Github에 올라와 있는 프로젝트 가져오기.  (0) 2019.11.08

설정

pom.xml

.....
<build>
    <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>3.2.2</version>
        <configuration>
             <failOnMissingWebXml>false</failOnMissingWebXml>
        </configuration>
    </plugin>
.....
  • 먼저 web.xml 파일이 없어서 오류가 나지않게 failOnMissingWebXml의 값을 false로 줍니다.

RootConfig.java

@Configuration
@ComponentScan(basePackages = "com.petcare.web",
        excludeFilters = @ComponentScan.Filter({
                Controller.class,
                RestController.class
        }))
@PropertySource(value = "classpath:application.properties")
@MapperScan(basePackages = "com.petcare.web.mapper")
@EnableTransactionManagement
public class RootConfig { ... }
  • RootConfig은 xml 설정의 applicationContext.xml 역할을 합니다.
  • @ComponentScan 으로 basePackages에 지정된 패키지 이하를 검색해 @Component 붙은 빈들을 등록시켜줍니다. 계층형 구조로 만들기 위해, @Controller,@RestController 어노테이션이 붙은 빈들은 excludeFilters를 이용해 빈등록에서 제외시켜줍니다. 
  • @PropertySource로는 디비정보 등과 같은 민감한 정보를 보호하기 위해, 따로 properties를 만들고, @Value로 주입시켜줍니다.
  • @MapperScan은 마이바티스의 Mapper인터페이스를 검색하기 위해 설정합니다.
  • @EnableTransactionManagement는 xml 기반의 설정에서 <tx:annotation-driven> 과 같은 역할을 합니다.

ServletConfig.java

@EnableWebMvc
@ComponentScan(basePackages = "com.petcare.web.controller")
public class ServletConfig implements WebMvcConfigurer {...}
  • xml설정에서 보통 servlet-context.xml로 쓰는 스프링컨텍스트의 역할과 같습니다.
  • @EnableWebMvc를 사용하여 WebMvcConfigurationSupport 의 도움을 받습니다. 해당 클래스가 해주는 일은 문서를 통해 살펴보세요.
    https://docs.spring.io/spring/docs/5.1.6.RELEASE/javadoc-api/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.html
  • @ComponentScan(...) 을 이용해 controller 패키지 안에 있는 빈들을 등록시켜줍니다.
    • 따라서 @Controller 빈들은 반드시 controller 패키지 안에 집어넣어야합니다. 그렇지않으면 빈으로 등록되지 않습니다.
  • implements WebMvcConfigurer 를 이용해 @EbableWebMvc를 사용하여 자동구성된 스프링MVC 구성에 다른 설정을 추가할 수 있게끔 해줍니다.

WebConfig.xml

public class WebConfig extends AbstractAnnotationConfigDispatcherServletInitializer {...}
  • web.xml 과 같은 역할을 합니다.

'JAVA > SPRING PROJECT' 카테고리의 다른 글

Git과 Git Desktop 개요  (0) 2019.11.15
SPRING VALIDATOR  (0) 2019.11.13
[Git] 깃 전략.  (0) 2019.11.08
Github에 올라와 있는 프로젝트 가져오기.  (0) 2019.11.08
스프링 설정  (0) 2019.11.03

+ Recent posts